由于从Java 1.8中取消了JDBC桥(我们仍然哀悼)并移到了UcanAccess,所以我一直在调试SQL代码,该代码过去从未给我带来任何问题。.语句之一是:

DELETE TreatmentRecords.DateGiven, TreatmentRecords.TimeGiven, SInformation.Surname, SInformation.FirstNames, TreatmentRecords.Diagnosis, TreatmentRecords.*
FROM SInformation INNER JOIN TreatmentRecords ON SInformation.SID = TreatmentRecords.SID
WHERE (((TreatmentRecords.DateGiven)=#2015-03-07#) AND ((TreatmentRecords.TimeGiven)='17;16') AND ((SInformation.Surname)='Doe') AND ((SInformation.FirstNames)='John') AND ((TreatmentRecords.Diagnosis)='Headache'));


在Access本身中执行时,我绝对不会出现任何错误或问题。
但是,Ucancess引发以下异常:

net.ucanaccess.jdbc.UcanaccessSQLException: unexpected token: TREATMENTRECORDS required: FROM


任何想法,为什么将不胜感激!

最佳答案

这是非标准的SQL删除语句,即使Jet引擎支持,ucanaccess也不支持该语句。没什么奇怪的。
因此,您必须为此使用标准SQL。

编辑
例如,像这样的东西(我还没有添加所有条件):

   DELETE FROM TreatmentRecords tr WHERE
    tr.DateGiven=#2015-03-07# AND EXISTS
(SELECT * FROM SInformation s WHERE s.SID=tr.SID AND  s.Surname='Doe')

10-06 10:49