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

标签 mysql sql many-to-many

我有两张 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/

相关文章:

mysql 'IN' 子句问题

php - Register.php不插入sql查询

java - 同一类中的HQL多对多查询

PHP MYSQL 反选

php cron 作业不工作

mysql - SQL 仅选择列上具有最大值的行

php - 如何在 MySQL 的 instr() 中应用通配符?

sql - 转置键值对 SQL 表

mysql - 实现多对多关系

mysql - 并搜索 MySQL 多对多表