我有两个表(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)
但这会返回此错误:
only a single result allowed for a SELECT that is part of an expression
有人可以帮我吗?
谢谢。
最佳答案
示例查询的问题是,当 SELECT *
返回多列时,IN 子句无法与 SELECT *
结合使用。您需要指定列...
不在
DELETE FROM B
WHERE B.2 NOT IN (SELECT A.1
FROM A)
不存在
DELETE FROM B
WHERE NOT EXISTS (SELECT NULL
FROM A
WHERE A.1 = B.2)
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)
结论:
我没有 SQLite 的任何性能统计数据,但 NOT EXISTS
将是我的选择,因为它在第一次满足时返回 true - 非常适合处理重复项。
关于php - 删除 SQLite 中另一个表中不存在的所有行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3876344/