gpt4 book ai didi

mysql - 在查询中使用 'as'

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

我有一个像这样的表,类型是innodb,id和sid已建立索引。

  id | sid
##########
1 | 100
1 | 101
1 | 102
1 | 103
1 | 104
1 | 105
2 | 100
2 | 101
3 | 100
3 | 101

我需要 id 的 sid 100,...105,例如 id=1。我有这个查询

select t1.id
from test as t1, test as t2, test as t3,
test as t4, test as t5, test as t6
where t1.sid=100
and t2.sid=101
and t3.sid=102
and t4.sid=103
and t5.sid=104
and t6.sid=105
and t1.id = t2.id = t3.id = t4.id = t5.id = t6.id

但是当我运行查询时 phpmyadmin 挂起。记录数为2000条。

什么是优化查询?

最佳答案

令人惊讶的是显示的 SQL 语句可以编译/运行。

但是,您可以通过将当前最后一行重写为:

select t1.id
from test as t1, test as t2, test as t3,
test as t4, test as t5, test as t6
where t1.sid = 100
and t2.sid = 101
and t3.sid = 102
and t4.sid = 103
and t5.sid = 104
and t6.sid = 105
and t1.id = t2.id
and t1.id = t3.id
and t1.id = t4.id
and t1.id = t5.id
and t1.id = t6.id;
<小时/>

Is this query optimal?

鉴于您对 Maulik Vora 的回答的评论,即范围 { 100 .. 105 } 只是一个示例,那么我们需要知道它是否始终是 6 个值,还是可能是 5 或 7 或其他数字。但是,最佳结构很可能使用包含所需值的临时表(将其称为具有非空唯一列 SID 的 ListToMatch),并且查询是:

SELECT T.ID
FROM Test AS T JOIN ListToMatch AS L ON T.SID = L.SID
GROUP BY T.ID
HAVING COUNT(*) = (SELECT COUNT(*) FROM ListToMatch);

您将感兴趣的一组值插入到 ListToMatch 中;然后您可以获得匹配的 ID 值列表。这可能更接近最优,尤其是因为它适应 1 个值和 100 个值就像适应 6 个值一样容易,而使用 100 路自连接重写 SQL 不需要太多考虑。 p>

关于mysql - 在查询中使用 'as',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7631488/

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