sách gpt4 ăn đã đi

sql - 选择与多对多连接表中的所有组匹配的记录

In lại Tác giả: Walker 123 更新时间:2023-11-29 15:08:30 25 4
mua khóa gpt4 giày nike

我有 2 个表:集合和组。两者都使用第三个表 set_has_groups 连接。我想要获得包含我指定的所有组的集合

一种方法是

SELECT column1, column2 FROM sets WHERE 
id IN(SELECT set_id FROM set_has_group WHERE group_id = 1)
AND id IN(SELECT set_id FROM set_has_group WHERE group_id = 2)
AND id IN(SELECT set_id FROM set_has_group WHERE group_id = 3)

显然这不是最漂亮的解决方案

我也尝试过这个:

SELECT column1, column2 FROM sets WHERE 
id IN(SELECT set_id FROM set_has_group WHERE group_id IN(1,2,3) GROUP BY group_id
HAVING COUNT(*) = 3

这看起来更漂亮,但问题是它需要很长时间才能执行。第一个查询运行时间约为 200 毫秒,而第二个查询则需要 1 分钟多。

知道这是为什么吗?

===更新:我已经玩过更多了,我修改了第二个查询,如下所示

SELECT columns FROM `set` WHERE id IN(
select set_id FROM
(
SELECT set_id FROM set_has_group
WHERE group_id IN(1,2,3)
GROUP BY set_id HAVING COUNT(*) = 3
) as temp
)

速度真快它与之前的第二个查询相同,只是我将其包装在另一个临时表中很奇怪

câu trả lời hay nhất

我怀疑第二个查询中存在小错误。

说实话,我也不确定。可能第二个查询是通过全表扫描执行的。同时第一个“IN”真正转变为“EXISTS”。所以,你可以尝试使用“存在”。例如:

...
where 3 = (select count(*) from set_has_group
where group_id in (1, 2, 3) and set_id = id
group by set_id)

关于sql - 选择与多对多连接表中的所有组匹配的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1440832/

25 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress