如何删除表内连接与Sqlite中的其他表?

D T*_*D T 22 sqlite

我的查询:

DELETE a FROM TR_ContactResultRecord  a
INNER JOIN TR_Case  b on (a.FireStationCode=b.FireStationCode and a.CaseNo=b.CaseCode )
WHERE b.Update_DateTime <=20140628134416
Run Code Online (Sandbox Code Playgroud)

它显示错误: [Err] 1 - near "a": syntax error

如何删除表内连接与Sqlite中的其他表?

Ole*_*nko 36

尝试使用子查询重写您的查询:如果你的PK TR_ContactResultRecordCaseNo

DELETE FROM TR_ContactResultRecord
WHERE CaseNo IN (
  SELECT CaseNo FROM TR_ContactResultRecord a
  INNER JOIN TR_Case b
    ON (a.FireStationCode=b.FireStationCode and a.CaseNo=b.CaseCode )
  WHERE b.Update_DateTime <=20140628134416
);
Run Code Online (Sandbox Code Playgroud)

  • 哦,所以SQLite不喜欢`DELETE FROM table JOIN ...`? (12认同)
  • 我也收到此错误,看来sqlite不支持删除内部联接 (3认同)
  • select语句可能应该是** a.CaseNo **而不是** CaseNo **。否则很好的答案! (2认同)

Pet*_*cka 11

默认情况下,SQLite 在每个表中都有特殊的 ROWID 列。来自官方文档

您可以使用特殊列名 ROWID、_ROWID_ 或 OID 之一访问 SQLite 表的 ROWID。除非您声明一个普通表列以使用这些特殊名称之一,否则该名称的使用将引用声明的列而不是内部 ROWID。

代码如下:

DELETE FROM TR_ContactResultRecord
WHERE ROWID IN (
  SELECT a.ROWID FROM TR_ContactResultRecord a
  INNER JOIN TR_Case b
    ON (a.FireStationCode=b.FireStationCode and a.CaseNo=b.CaseCode )
  WHERE b.Update_DateTime <=20140628134416
);
Run Code Online (Sandbox Code Playgroud)

  • 同意。从长远来看,绝对是性能最好的。 (2认同)