如何 return 连接全部存在的行 SQL

How to return a row where joins ALL exist SQL

当加入的 table 在我的 on 上有所有匹配的行时,我如何 return 一行(最好是在 ANSI SQL 中)?

错误行为示例:

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

将 return 每个 table1 行与 table2 上的匹配关系为 1 或 2(即 return 一个 table1 行与一个或更多 matching 个字段。

我怎样才能得到 return 只有 table1 行的东西,这些行有 table2 行相关并且 matching 既是 1 又是 2(所以一个 AND而不是 OR,因此必须至少有一个 table2matching = 1,并且至少有一个 matching = 2,因此它不会显示任何 table1 没有两个匹配项的行)?

我不想对同一个 table 进行两次连接,我知道我可以进行两次左连接,一次匹配 1,一次匹配 2,但我不这样做事先知道我需要多少火柴。

干杯

您可以使用:

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;