gpt4 book ai didi

mysql - SQL 查询仅从另一个表中选择具有一组独占相关实体的结果

转载 作者:行者123 更新时间:2023-11-29 14:16:33 26 4
gpt4 key购买 nike

我有一个包含 2 个表的关系数据库,比方说 paintingscolors。它们通过数据透视表 color_painting 处于多对多关系。

“绘画”表:

id  name
---------------------
1 Lion and cubs
2 Sunset in Ontario

“颜色”表:

id  color
---------------------
1 grey
2 yellow
3 orange

“color_painting”表:

painting_id  color_id
---------------------
1 1
1 2
2 1
2 2
2 3

因此,绘画与颜色的关联如下:

Lion and cubs”链接到颜色“grey”和“yellow

安大略省的日落”链接到“grey”、“yellow”和“orange

如何编写一个 SQL 查询来选择其中只有特定颜色而没有其他颜色的绘画?

例如我想要只有“灰色”和“黄色”的画。因此,查询应该返回“Lion and cubs”绘画而不是“Sunset”,因为“Sunset”也有“orange”。

是否可以一次查询? (SQL 应该在 MySQL、SQLite、PostgreSQL 和 SQL Server 方言上运行)。

最佳答案

使用NOT INNOT EXISTS 来排除不同颜色的绘画,其余绘画必须有 2 行以符合您的需要。

select p.id, p.name
from paintings p
join color_painting cp on p.id = cp.painting_id
where p.id not in
(
select painting_id
from color_painting cp
join colors c on cp.color_id = c.id and c.color not in ('yellow','grey')
)
group by p.id, p.name
having count(*) = 2

关于mysql - SQL 查询仅从另一个表中选择具有一组独占相关实体的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46884084/

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