我已经尝试了好几个小时,但还没有弄清楚。
假设我有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/