gpt4 book ai didi

Mysql:从使用 'in' 和 'not in' 条件的连接表中选择行

转载 作者:行者123 更新时间:2023-11-29 05:08:27 26 4
gpt4 key购买 nike

我有如下 3 个表:

表格媒体:

+------------------------+ 
| media_id | media_name |
+------------------------+
| 1 | item1 |
| 2 | item2 |
| 3 | item3 |
+------------------------+

加入表媒体标签:

+--------------------+ 
| media_id | tag_id |
+--------------------+
| 1 | 1 |
| 1 | 2 |
| 2 | 1 |
| 3 | 1 |
| 3 | 3 |
+--------------------+

表格标签:

+--------------------+ 
| tag_id | tag_name |
+--------------------+
| 1 | blue |
| 2 | red |
| 3 | white |
| 4 | green |
+--------------------+

我希望检索所有带有“蓝色”和“白色”标签但没有带有“红色”标签的媒体。

因此在我的示例中,结果必须是:item2item3

我尝试了这个查询,但显然显示了 item1:

SELECT m.media_id, media_name FROM media AS m 
INNER JOIN mediatag AS mag ON m.media_id = mag.media_id
WHERE tag_id = '1' OR tag_id = '3' AND tag_id !='2';

如何做到这一点?

最佳答案

对您的数据进行分组,并仅选择那些具有您提到的条件的组

SELECT m.media_id, m.media_name 
FROM media AS m
INNER JOIN mediatag AS mag ON m.media_id = mag.media_id
GROUP BY m.media_id, m.media_name
HAVING sum(tag_id in (1,3)) > 0
AND sum(tag_id = 2) = 0

关于Mysql:从使用 'in' 和 'not in' 条件的连接表中选择行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43857382/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com