尝试这个
SELECT
whatever
FROM
A
INNER JOIN B
ON A.A_ID = B.A_ID
WHERE
B.C_ID IN (4, 5)
或者
SELECT
whatever
FROM
A
INNER JOIN B
ON A.A_ID = B.A_ID
WHERE
B.C_ID = 4 OR B.C_ID = 5
更新
如果你只想要匹配的对
SELECT
whatever
FROM
A
INNER JOIN B
ON A.A_ID = B.A_ID
WHERE
A.A_ID IN (SELECT A_ID
FROM B
WHERE C_ID IN (4, 5)
GROUP BY A_ID
HAVING COUNT(*) = 2) AND
B.C_ID IN (4, 5)
子选择A_ID
对记录进行分组和计数。HAVING 子句的工作方式与 WHERE 子句类似,但在分组后执行。所以内部选择只返回A_ID
对应于 (4, 5)-pairs of 的 s C_ID
。整个查询总是返回偶数条记录,例如
A_ID | B_ID | C_ID
1 | 1 | 4
1 | 2 | 5
2 | 3 | 4
2 | 4 | 5
编辑
如果您只想要 A_ID,其中不仅存在 C_ID 4 和 5,而且不存在其他 C_ID,则将查询更改为
SELECT B.*
FROM A INNER JOIN B ON A.A_ID = B.A_ID
WHERE B.C_ID IN (4, 5) AND
A.A_ID IN (SELECT A_ID
FROM B
GROUP BY A_ID
HAVING MIN(C_ID)=4 AND MAX(C_ID)=5 AND COUNT(*)=2)
如果这两个数字(本例中为 4 和 5)总是连续的,您可以删除该COUNT(*)=2
部分。
(注意:根据您的评论之一,加入在A_ID
列上。我在所有示例中都更改了它。)
罗宾更新
谢谢,在您的帮助下,我想出了这个:
SELECT
*
FROM
A a
INNER JOIN B
ON a.A_ID = B.A_ID
WHERE
(SELECT COUNT(*) FROM B b WHERE b.A_ID = a.A_ID and C_ID IN (4, 5)) =
(SELECT COUNT(*) FROM A aa INNER JOIN B b ON aa.A_ID = b.A_ID WHERE b.A_ID = a.A_ID)