我有一张桌子:
sqlite> select * from lookup;
node|id
1|1
1|2
2|4
2|6
sqlite> select * from tag;
tagid|data
1|bar
2|baz
3|geek
4|foo
5|bank
6|auto
我想在标签表中找到在查找中未引用的ID。
我尝试了:
select id from tag where not exists (select tagid from lookup);
# I am expecting the following result: 3, 5
但这什么也没有返回。
tagid
是tag
的前键,这可能是问题的根源吗?您能否提示如何在SQL中执行此操作? 最佳答案
您需要将两个查询关联起来。有了它,您只是在询问查找表中是否不存在任何内容。
select
id
from
tag t
where
not exists (
select
'x'
from
lookup l
where
l.tagid = t.id -- correlation
);
您也可以使用外部联接来编写
select
t.id
from
tag t
left outer join
lookup l
on t.id = l.tagid
where
l.tagid is null;
对于这两种方法,某些数据库具有不同的性能特征。
删除:
delete from
tag
where
not exists (
select
'x'
from
lookup l
where
l.tagid = tag.id
);
关于sql - 两组之间的SQLite差异,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25826715/