假设我有两个表(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)
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)
| 归档时间: |
|
| 查看次数: |
3566 次 |
| 最近记录: |