我有两张桌子(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)
有人可以帮我吗?
谢谢。
您的示例查询的问题是,一个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——非常适合处理重复项。