如何返回连接ALL的行存在SQL

时间:2016-05-19 17:35:40

标签: mysql sql postgresql ansi-sql

当联接表在on上有所有匹配的行时,如何返回一行(最好是在ANSI SQL中)?

错误行为的示例:

SELECT table1.*
    , whatever
FROM   table1
      INNER JOIN table2 ON table2.whateverrelation = table1.whateverrelation
                       AND table2.matching IN(1, 2);

将返回每个table1行,table2上的匹配关系为1或2(即将返回带有一个或多个table1字段的matching行。< / p>

我怎么能得到的东西只返回table1行,table2行相关且matching分别为1和2(所以是AND而不是OR,所以那里必须至少有一个table2matching = 1且至少一行matching = 2,因此如果没有两个匹配则不会显示任何table1行?

我宁愿不要在同一张桌子上做两次连接,我知道我可以只进行两次左连接,一次匹配1次,一次匹配2次,但我不知道事先知道我需要多少匹配。

干杯

1 个答案:

答案 0 :(得分:0)

你可以使用:

SELECT table1.col1, ....
FROM table1 
INNER JOIN table2 
  ON table2.whateverrelation = table1.whateverrelation 
GROUP BY  table1.col1, ....
HAVING SUM(table2.matching = 1) > 0
   AND SUM(table2.matching = 2) > 0;