我有两张桌子。表A和表B。两者都有多对多的关系。
A
B
表A:
ID --- 1 2
表B:
ID --- 3 4
表AB:
ID | A_ID | B_ID ---------------- 5 | 1 | 4 6 | 1 | 3 7 | 2 | 3
我想要得到的名单ID,从表S =B该有关系 的名单ID表第A。
ID
上表中的示例:
我想所有B这些都表的关系小号A ID1和ID2,我得到那么ID3具有这两个ID表第A。
如何使用SQL查询做到这一点?
如果要基于“不作为”列表(而不是“全部”作为)进行选择,请按照以下步骤操作:
SELECT b_id FROM ab WHERE a_id IN (1,2) GROUP BY b_id HAVING COUNT(a_id) = 2
(1,2)用您的列表替换,并2在having子句中替换为列表项的数量。
(1,2)
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子句。
您还可以使用一个临时表,这将导致从该临时表中选择“全部为”,因此Gordon Linoffs会回答…