小编典典

MySQL严格选择涉及多对多表的行

sql

我有多对多格式的三个表。即,表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,…),我只需要选择那些拥有所有选项的人。


阅读 209

收藏
2021-05-16

共1个答案

小编典典

有点棘手的解决方案是将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子句中作为子选择加入该查询。

2021-05-16