我有多对多格式的三个表。即,表A,B和AB的设置符合您的期望。
给定一些A ID,我只需要选择AB中与所有ID匹配的行。
类似以下内容将无法正常工作:
“从AB处选择* A_id = 1 AND A_id = 2 AND A_id = 3 AND …”“因为没有一行包含多个A_id
使用sql语句中的OR并不会更好,因为它会产生具有至少一个A id的所有结果(而我只希望具有所有id的那些行)。
编辑:
对不起,我应该解释。我不知道实际的多对多关系是否与实际的问题有关。这些表概述如下:
Table People int id char name Table Options int id char option Table peoples_options int id int people_id int option_id
因此,我有一个人员列表,一个选项列表以及一个选项和人员表。
因此,给定选项ID的列表,例如(1,34,44,…),我只需要选择那些拥有所有选项的人。
有点棘手的解决方案是将IN与组一起使用并具有过滤器。像这样:
SELECT B_id FROM AB WHERE A_id IN (1,2,3) GROUP BY B_id HAVING COUNT(DISTINCT A_id) = 3;
这样,您只能获得恰好具有3个A_id值的B_id值,并且它们必须来自您的列表。我在COUNT中使用DISTINCT以防万一(A_id,B_id)不唯一。如果需要其他列,则可以在另一个select语句的FROM子句中作为子选择加入该查询。