两组之间的SQLite差异

两组之间的SQLite差异

我有一张桌子:

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


但这什么也没有返回。 tagidtag的前键,这可能是问题的根源吗?您能否提示如何在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/

10-11 04:07