admin

查找不在另一个表中的多个字段上的记录

sql

假设我有两个具有以下架构的表(tb1tb2):

CREATE TABLE tb1 (
  col1 INT NOT NULL,
  col2 TEXT NOT NULL,
  col3 TEXT NOT NULL,
  col4 REAL
);

如何找到的记录tb1中不存在的tb2列上col1col2col3

但到目前为止他们只对一列所有发现的记录。我还在这些链接中使用了代码/逻辑,但最终返回了错误的结果,但性能却非常差(tb1上有45K条记录,tb2上有170万条记录)。我正在尝试在SQLite上实现这一点。

如果您想看的话,这是我的示例代码(使用带w的左连接,其中null为空),但是请不要依赖它:

SELECT *
FROM tb1
LEFT JOIN tb2
ON
tb1.col1 = tb2.col1 AND
tb1.col2 = tb2.col2 AND
tb1.col3 = tb2.col3
WHERE
tb2.col1 IS NULL AND
tb2.col2 IS NULL AND
tb2.col3 IS NULL

阅读 208

收藏
2021-07-01

共1个答案

admin

试一试NOT EXISTS,当然性能可能取决于现有的索引…

SELECT *
FROM tb1
WHERE NOT EXISTS
 ( 
   SELECT *
   FROM tb2
   WHERE
      tb1.col1 = tb2.col1 AND
      tb1.col2 = tb2.col2 AND
      tb1.col3 = tb2.col3
 )
2021-07-01