INNER JOIN其中**每个**行必须与WHERE子句匹配?

jhi*_*ner 6 sql postgresql exists left-join

这是我正在尝试做的简化示例.我有两张桌子,A和B.

A          B
-----      -----
id         id
name       a_id
           value
Run Code Online (Sandbox Code Playgroud)

我想只选择A中的行,其中B中行的所有值都与where子句匹配.就像是:

SELECT * from A INNER JOIN B on B.a_id = A.id WHERE B.value > 2
Run Code Online (Sandbox Code Playgroud)

上述查询的问题是,如果B中的任何行的值> 2,我将从A获得相应的行,而我只想要来自A的行

1.)ALL B中的行为B.a_id = A.id匹配WHERE,OR

2.)B中没有引用A的行

B基本上是一个过滤器表.

Qua*_*noi 7

SELECT  *
FROM    a
WHERE   NOT EXISTS
        (
        SELECT  NULL
        FROM    b
        WHERE   b.a_id = a.a_id
                AND (b.value <= 2 OR b.value IS NULL)
        )
Run Code Online (Sandbox Code Playgroud)