我有两张 table 。表 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
我想从表 B
中获取 ID
的列表,它与 ID
的列表有关系表 A
。
上表中的示例:
我想获取所有与表 A
ID
1 和 ID
2 相关的 B
. 然后我得到 ID
3 必须到表 A
的两个 ID
。
我如何使用 SQL 查询执行此操作?
最佳答案
如果您希望根据 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 的答案...
关于mysql - 从表 B 中获取与表 A 中的多个条目(给定列表)相关的所有条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26650786/