gpt4 book ai didi

mysql - 如何在 mySQL 中避免多个几乎相同的子查询

转载 作者:行者123 更新时间:2023-11-29 02:18:16 25 4
gpt4 key购买 nike

我需要获得两个几乎相同的子查询的结果,我想知道是否有一种方法可以避免执行两次子查询的低效率。

SELECT
DISTINCT(liens.lienID),
ROUND(liens.lienSettlementAmount, 2) as lienSettlementAmount,
(SELECT
ROUND(SUM(lienBills.amount), 2)
FROM lienBills2Lien
LEFT JOIN lienBills ON lienBills2Lien.lienBillID = lienBills.lienBillID
WHERE lienBills2Lien.lienID = liens.lienID
) AS totalBill,
(SELECT
ROUND(SUM(lienBills.amount), 2) - lienSettlementAmount
FROM lienBills2Lien
LEFT JOIN lienBills ON lienBills2Lien.lienBillID = lienBills.lienBillID
WHERE lienBills2Lien.lienID = liens.lienID
) AS savings

FROM events
RIGHT JOIN liens ON events.childID = liens.lienID

WHERE events.fileNumber = 14275
AND events.eventTypeID = 79

唯一的区别是在第二个子查询中减去 lienSettlementAmount。

这个查询给了我我需要的东西,但感觉不对。看来应该有更好的办法。

更新:@StanislavL 有正确答案。这是确切的代码:

SELECT
DISTINCT(liens.lienID),
ROUND(liens.lienSettlementAmount, 2) as lienSettlementAmount,
sub.r_sum as totalBill,
sub.r_sum - lienSettlementAmount as savings
FROM events
RIGHT JOIN liens ON events.childID = liens.lienID
LEFT JOIN (SELECT lienBills2Lien.lienID,
ROUND(SUM(lienBills.amount), 2) AS r_sum
FROM lienBills2Lien
LEFT JOIN lienBills ON lienBills2Lien.lienBillID = lienBills.lienBillID
GROUP BY lienBills2Lien.lienID
) sub ON sub.lienID = liens.lienID
WHERE events.fileNumber = 14275
AND events.eventTypeID = 79

但是,单个子查询的执行时间更长。此查询需要 0.0205 秒。我的两个子查询需要 0.0054 秒。没想到会是这个结果。

为什么单个子查询会更慢?也许这应该是一个单独的问题......

最佳答案

SELECT
DISTINCT(liens.lienID),
sub.r_sum as totalBill,
sub.r_sum-lienSettlementAmount as savings,
FROM events
RIGHT JOIN liens ON events.childID = liens.lienID
LEFT JOIN (SELECT lienBills2Lien.lienID
ROUND(SUM(lienBills.amount), 2) as r_sum
FROM lienBills2Lien
LEFT JOIN lienBills ON lienBills2Lien.lienBillID = lienBills.lienBillID
GROUP BY lienBills2Lien.lienID
) sub ON sub.lienID= liens.lienID

只需将子查询移至 FROM 并添加 JOIN

关于mysql - 如何在 mySQL 中避免多个几乎相同的子查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35961969/

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