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

sob*_*ber 1 sql sqlite

假设我有两个表(tb1,tb2),它们都具有以下模式:

CREATE TABLE tb1 (
  col1 INT NOT NULL,
  col2 TEXT NOT NULL,
  col3 TEXT NOT NULL,
  col4 REAL
);
Run Code Online (Sandbox Code Playgroud)

如何查找记录tb1中不存在的tb2列上col1,col2,col3

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

如果你想看,这是我的示例代码(使用左连接w/where为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
Run Code Online (Sandbox Code Playgroud)

dno*_*eth 9

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
 ) 
Run Code Online (Sandbox Code Playgroud)