获取表B中与表A中的多个条目(给定列表)有关的所有条目

时间:2014-10-30 10:38:38

标签: mysql sql many-to-many

我有两张桌子。表A和表B。两者都以many-to-many关系连接。

表A:

ID
---
1
2

表B:

ID
---
3
4

表AB:

ID | A_ID | B_ID
----------------
5  | 1    | 4
6  | 1    | 3
7  | 2    | 3

我想从表格ID获取B的列表,该列表与ID的{​​{1}}列表有关

上表中的示例:

我希望获得与表A B 1和A有关系的所有ID 2。然后,我得到ID 3必须表ID的{​​{1}}个。{/ p>

如何使用SQL查询执行此操作?

2 个答案:

答案 0 :(得分:2)

如果您希望根据As(不是ALL As)列表进行选择,那么请执行以下操作:

SELECT b_id
FROM ab
WHERE a_id IN (1,2)
GROUP BY b_id
HAVING COUNT(a_id) = 2

(1,2)替换为您的列表,并将having子句中的2替换为列表项的数量。

如果从子查询中获取As列表,则可以这样做(不是在MySQL中,但是......):

WITH subquery (
 --subquery code here
)

SELECT b_id
FROM ab
WHERE a_id IN subquery
GROUP BY b_id
HAVING COUNT(a_id) = (SELECT COUNT(*) FROM subquery)

在MySQL中,您必须将子查询代码放两次并删除WITH子句。

您还可以使用临时表,然后从该临时表中选择ALL As,因此Gordon Linoffs回答......

答案 1 :(得分:0)

您可以通过加入和统计来完成此操作:

SELECT B_ID
FROM AB JOIN A 
         ON
     AB.A_ID = A.ID
GROUP BY AB.B_ID
HAVING COUNT(DISTINCT AB.A_ID) = (SELECT COUNT(distinct ID) FROM A);

如果您知道ABA中没有重复项,则可以从distinct中删除count()