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

时间:2015-05-18 07:05:26

标签: sql sqlite

假设我有2个表格(tb1tb2),同时包含以下架构:

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

如何在[{1}},tb1tb2列上找到col1中不存在的col2记录?

我在thisthisthis进行了研究,但到目前为止,他们只在一列上查找记录。我也在这些链接中使用了代码/逻辑,但最终以非常差的性能返回错误的结果(tb1上有45K记录,tb2上有1.7M记录)。我试图在SQLite上实现它。

如果你想看到,这里是我的示例代码(使用左连接w / where为null),但不要依赖它:

col3

3 个答案:

答案 0 :(得分:8)

尝试使用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
 ) 

答案 1 :(得分:1)

如下:

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

答案 2 :(得分:0)

你好@Dnoeth和@Sober,

您可能会遇到跟随Dnoeth解决方案的问题,如果您不是,请告诉我。

  

消息402,级别16,状态1,行9数据类型文本和文本是   在等于运算符中不兼容。

注意:由于声誉较低,我无法发表评论。