删除不在 SQLite 中另一个表中的所有行

Sim*_*mon 1 php sql sqlite

我有两张桌子(A 和 B)。

我想删除表 B 中 B.1 不在表 A.2 中的所有行。

所以我在sqlite中写了这个公式:

DELETE FROM B 
WHERE 1 
IN 
 (SELECT * 
  FROM B 
  LEFT JOIN A 
  ON A.1=B.2 
  WHERE A.1 
  IS NULL)
Run Code Online (Sandbox Code Playgroud)

但这会返回此错误:

only a single result allowed for a SELECT that is part of an expression
Run Code Online (Sandbox Code Playgroud)

有人可以帮我吗?

谢谢。

OMG*_*ies 5

您的示例查询的问题是,一个IN子句不能结合使用SELECT *时,SELECT *返回多列。您需要指定列...

不在

DELETE FROM B
 WHERE B.2 NOT IN (SELECT A.1
                     FROM A)
Run Code Online (Sandbox Code Playgroud)

不存在

DELETE FROM B
 WHERE NOT EXISTS (SELECT NULL
                     FROM A
                    WHERE A.1 = B.2)
Run Code Online (Sandbox Code Playgroud)

SQLite 不支持 DELETE 语句中的 JOIN,但您也可以使用:

DELETE FROM B
 WHERE B.2 IN (SELECT B.2
                 FROM B
            LEFT JOIN A ON A.1 = B.2
                WHERE A.1 IS NULL)
Run Code Online (Sandbox Code Playgroud)

结论:

我没有 SQLite 的任何性能统计数据,但这NOT EXISTS是我的选择,因为它在第一次满意时返回 true——非常适合处理重复项。