gpt4 book ai didi

mysql - 将 Mysql 子查询转入连接

转载 作者:行者123 更新时间:2023-11-29 16:07:57 31 4
gpt4 key购买 nike

如何在 JOIN 中转换此子查询?

我读到子查询比 JOIN 慢。

SELECT 
reklamation.id,
reklamation.titel,
(
SELECT reklamation_status.status
FROM reklamation_status
WHERE reklamation_status.id_reklamation = reklamation.id
ORDER BY reklamation_status.id DESC
LIMIT 1
) as status
FROM reklamation
WHERE reklamation.aktiv=1

最佳答案

这应该可以做到:

SELECT r.id, r.titel, MAX(s.id) as status
FROM reklamation r
LEFT JOIN reklamation_status s ON s.id_reklamation = r.id
WHERE r.aktiv = 1
GROUP BY r.id, r.titel

这里的关键点是使用聚合来管理reklamationreklamation_status之间的基数。在原始代码中,内联子查询使用 ORDER BY reklamation_status.id DESC LIMIT 1 返回 reklamation_status 中与当前对应的最高 id reklamation。如果没有聚合,我们可能会在每个 reklamation 的结果集中获得多条记录(每个对应的 reklamation_status 一条记录)。

另一件事是要考虑JOIN的类型。 INNER JOIN 会过滤掉没有 reklamation_statusreklamation 记录:带有内联子查询的原始查询的行为并非如此,所以我选择了LEFT JOIN。如果您可以保证每个 reklamationreklamation_status 中至少有一个子级,您可以安全地切换回 INNER JOIN(这可能会更有效地执行) )。

<小时/>

附注:

I read that subqueries are slower than JOINs.

这不是普遍真理。这取决于许多因素,如果没有看到您的确切用例,就无法判断。

关于mysql - 将 Mysql 子查询转入连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55553550/

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