我有这两个表:
CREATE TABLE set (
id INT PRIMARY KEY;
value TEXT NOT NULL
);
CREATE TABLE filter (
id INT PRIMARY KEY
);
set TABLE包含一些与id绑定的信息。在现实中的一个非常大的集合。 过滤器TABLE应该像过滤器一样,如下所述。如果有的话,它将包含在集合TABLE中找到的id值的子集。
我在单个查询中需要做的是:
我不想在过滤器上区分COUNT(*),而是利用JOIN,UNION,INTERSECT和EXCEPT。
你会怎么写这样的查询?
答案 0 :(得分:2)
以下是使用outer join
和not exists
的一种方法:
select s.id, s.value
from set s
left join filter on s.id = filter.id
where not exists (select 1 from filter) or s.id = filter.id
这有点反直觉 - 但基本上,如果过滤表中没有记录,则返回all。否则,只返回那些匹配......