gpt4 book ai didi

mysql - 将同表嵌套查询转换为 JOIN

转载 作者:行者123 更新时间:2023-11-29 06:22:37 25 4
gpt4 key购买 nike

我们必须查询同一张表。 Table 'Foo',结构是这样的,

Foo
-------------
ID MID AID STATUS
1 12 88 A
2 12 88 B
3 13 88 A
4 13 88 B
5 14 88 A
6 15 88 A

所以我们只需要那些具有 STATUS = A 而不是 STATUS != B 的记录。我们成功地创建了嵌套查询。但是这个表有百万条记录,耗时太多。

工作嵌套查询

SELECT FO.MID FROM FOO FO WHERE FO.AID = 188 AND FO.STATUS = 'A' AND FO.MID NOT IN 
(SELECT FO.MID FROM FOO FO WHERE FO.AID = 188 AND FO.STATUS = 'B' AND FO.MID IS NOT NULL)

那么如何使用 JOIN 来加快速度呢?

最佳答案

一种方法是聚合:

select fo.mid
from foo fo
group by fo.mid
having sum(fo.status = 'A') > 0 and
sum(fo.status = 'B') = 0;

如果你有一个mid的表,那么也许最好的方法是:

select m.mid
from mids m
where exists (select 1 from foo where fo.mid = m.mid and fo.status = 'A') and
not exists (select 1 from foo where fo.mid = m.mid and fo.status = 'B');

为了该查询的性能,您需要在 foo(mid, status) 上建立索引。

关于mysql - 将同表嵌套查询转换为 JOIN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32651305/

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