【发布时间】:2015-03-11 15:29:19
【问题描述】:
我有这两张表:
CREATE TABLE set (
id INT PRIMARY KEY;
value TEXT NOT NULL
);
CREATE TABLE filter (
id INT PRIMARY KEY
);
集合 TABLE 包含一些与 id 相关的信息。现实中的一个非常大的集合。 过滤器 TABLE 应该像下面解释的过滤器一样工作。如果有的话,它将包含在集合 TABLE 中找到的 id 值的子集。
我需要在单个查询中做的是:
- 如果过滤器为空,我需要获取集合中的所有元素(负过滤器)。
- 如果过滤器不为空,我需要获取INNER JOIN,从而进行适当的过滤。
我不希望在过滤器上区分 COUNT(*),而是利用 JOIN、UNION、INTERSECT 和 EXCEPT。
您将如何编写这样的查询?
【问题讨论】:
-
为什么你更喜欢某些结构而不是其他结构?你能提供一些样本数据和想要的结果吗?
-
您是否尝试过使用左外连接?
-
问题是关于单个查询。这就是为什么我需要避免使用 IF。
-
您使用的是哪个 DBMS? Postgres?
-
@VB1,除非您使用过滤器上的 COUNT(*) 进行 IF 等效,否则这将不起作用。由于过滤器是集合的子集,因此 LOJ 将导致集合本身。