【发布时间】:2015-09-17 19:10:25
【问题描述】:
这是我正在尝试做的一个简化示例。我有两张桌子,A 和 B。
A B
----- -----
id id
name a_id
value
我只想选择 A 中的行,其中 B 中的所有行的值都与 where 子句匹配。比如:
SELECT * from A INNER JOIN B on B.a_id = A.id WHERE B.value > 2
上述查询的问题是,如果 B 中的 ANY 行的值 > 2,我将从 A 中获取相应的行,并且我只想要 A 中的行,如果
1.) ALL B 中的行 for B.a_id = A.id 匹配 WHERE,OR
2.) B 中没有引用 A 的行
B 基本上是一个过滤器表。
【问题讨论】:
-
您能否编辑您的问题并提供示例数据和所需的结果?
-
你的定义是矛盾的。如果
a.id中有多个不同的值,ALL the rows in B match the WHERE是不可能的,因为B中的一行一次不能有多个值。请说清楚。您的意思似乎是:返回来自A的所有行,其中B中的所有行匹配B.a_id = A.id也满足第二个条件B.value > 2。 -
你说得对,@ErwinBrandstetter,我想到了 B.a_id = A.id 的约束。编辑澄清。
标签: sql postgresql left-join exists