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

标签 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)

但这会返回此错误:

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/

相关文章:

android在fragment中加载sqlite数据

SQLite 更新设置值 BLOB 特定字节

java - 如何在 Java 中用 JSON 生成 "raw"字符串

php - zend Framework 2 - 使用验证器比较2个输入?

Apache 关闭后的 PHP?

php - SQL, "WHERE IN"返回自动排序结果

sql - 在 SQL 中查找顶级父级

php - 自定义 Laravel Passport 响应未经身份验证

sql - 在自定义函数中使用 SQL 查询作为数组参数(输入)

c# - sqlite-net的通用方法