当联接表在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,所以那里必须至少有一个table2
行matching
= 1且至少一行matching
= 2,因此如果没有两个匹配则不会显示任何table1
行?
我宁愿不要在同一张桌子上做两次连接,我知道我可以只进行两次左连接,一次匹配1次,一次匹配2次,但我不知道事先知道我需要多少匹配。
干杯
答案 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;