我已经尝试了好几个小时,但还没有弄清楚。

假设我有2张桌子-主桌子和细节桌子。

主数据/明细数据如下

master table
+------+-------+
| id   | name  |
+------+-------+
|    1 | jeff  |
|    2 | simon |
|    3 | andy  |
|    4 | jerry |
+------+-------+

details table
+----+-----------+---------+
| id | master_id | tag     |
+----+-----------+---------+
|  1 |         1 | WINDOWS |
|  2 |         1 | MAC     |
|  3 |         2 | MAC     |
|  4 |         3 | WINDOWS |
|  5 |         3 | MAC     |
|  6 |         3 | LINUX   |
|  7 |         4 | MAC     |
+----+-----------+---------+


如何选择同时具有标签“ WINDOWS”,“ MAC”的主记录。

因此,它仅应返回仅jeff和andy的master_id 1和3。

如果我做一个

select distinct(master_id) from details where tag in ('WINDOWS', 'MAC')


它给了我所有人。

对新手问题很抱歉,但如果有人可以提供帮助,将不胜感激。

最佳答案

您需要带有GROUP BY子句的简单HAVING

select master_id
from details
where tag in ('WINDOWS', 'MAC')
group by master_id
having count(*) = 2;


如果详细信息表中的tag重复了master_id,则需要count(distinct tag)

关于mysql - 在“主-明细”表关系中从“明细”表中仅查找某些主项目,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51658821/

10-16 07:26