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

蒂姆·邓克利

我需要得到两个几乎相同的子查询的结果,并且我想知道是否有一种方法可以在不两次执行子查询的情况下降低效率。

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

JUst将子查询移至FROM并添加JOIN

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用几乎相同的子查询优化MySQL查询

来自分类Dev

如何避免MySQL子查询中的列重复?

来自分类Dev

为实现接口的类避免多个几乎相同的声明

来自分类Dev

如何避免子查询重复

来自分类Dev

在SQL查询中避免多个“或”

来自分类Dev

使用 XMLTABLE() 时如何避免 SELECT 中的子查询?

来自分类Dev

避免错误-子查询返回多个行

来自分类Dev

截断用户窗体中的三个几乎相同的子?

来自分类Dev

如何避免在php mysql中插入相同的主键和值

来自分类Dev

如何在Oracle SQL中使用相同的子查询更新同一表中的多个列

来自分类Dev

子查询为2个几乎相同的查询返回不同的值

来自分类Dev

如何在mysql中运行子查询

来自分类Dev

如何在mysql中编写子查询

来自分类Dev

如何计算mysql中的子查询

来自分类Dev

如何在MySQL中执行多个查询

来自分类Dev

如何避免mysql查询中的重复子句

来自分类Dev

MySQL 子查询 IN 多个值

来自分类Dev

在多个行的子查询中使用LIKE时如何避免错误1242

来自分类Dev

如何使mysql子查询

来自分类Dev

ZF2如何避免SQL查询限制在子查询中添加引号

来自分类Dev

避免在子查询中重复WHERE条件

来自分类Dev

MySQL,如何在SELECT查询中引用子查询字段

来自分类Dev

在与MySQL相同的查询中使用相同的子查询2次

来自分类Dev

在与MySQL相同的查询中使用相同的子查询2次

来自分类Dev

MySQL子查询还是多个查询?

来自分类Dev

如何使用php和mysql从基于一个单词的数据库中获取几乎相同的单词

来自分类Dev

如何发现几乎相同的琴弦?

来自分类Dev

如何发现几乎相同的琴弦?

来自分类Dev

在一个查询中对多个数据库运行相同的查询(MySQL)

Related 相关文章

热门标签

归档