Mysql 如何优化来自多个表的多个子查询?
我有两个表格,例如tnx\u lc\u发票和tnx\u lc\u付款。我想从这两个表生成报告 表架构如下图所示 tnx\U信用证支付 tnx\U lc\U发票 我想生成如下图像的输出 输出 我正在尝试下面的查询及其生成类似的输出。但我想优化此查询或任何其他解决方案,以获得更快的结果Mysql 如何优化来自多个表的多个子查询?,mysql,sql,Mysql,Sql,我有两个表格,例如tnx\u lc\u发票和tnx\u lc\u付款。我想从这两个表生成报告 表架构如下图所示 tnx\U信用证支付 tnx\U lc\U发票 我想生成如下图像的输出 输出 我正在尝试下面的查询及其生成类似的输出。但我想优化此查询或任何其他解决方案,以获得更快的结果 SELECT a.lc_no, a.invoiceValue, b.paymentValue, ( a.invoiceValue - b.paymentValue
SELECT
a.lc_no,
a.invoiceValue,
b.paymentValue,
(
a.invoiceValue - b.paymentValue
) AS shortPaymentValue
FROM
(
SELECT
lc_no,
sum(invoice_value) AS invoiceValue
FROM
tnx_lc_invoice
GROUP BY
lc_no
) a
INNER JOIN (
SELECT
lc_no,
sum(payment_value) AS paymentValue
FROM
tnx_lc_payment
GROUP BY
lc_no
) b ON a.lc_no = b.lc_no
如果有其他简单的解决方案,请告诉我。提前谢谢。不要使用子查询,而是在它们之间创建一个内部直接查询
SELECT
a.lc_no,
sum(a.invoice_value) AS invoiceValue,
sum(b.payment_value) AS payment_value,
(sum(a.invoice_value) - sum(b.paymentValue)) AS shortPaymentValue
FROM tnx_lc_invoice a
INNER JOIN tnx_lc_payment b
ON a.lc_no = b.lc_no
GROUP BY
a.lc_no
查询不正确,因为如果发票和付款在同一信用证号上重复,则会使行相乘 因此,有必要在内部查询中至少添加一个GROUPBY
SELECT
a.lc_no,
sum(a.invoice_value) AS invoiceValue,
sum(b.payment_value) AS payment_value,
sum(a.invoice_value) - sum(b.payment_Value) AS shortPaymentValue
FROM (select lc_no, sum(invoice_value) as invoice_value
from tnx_lc_invoice group by lc_no) a
INNER JOIN tnx_lc_payment b
ON a.lc_no = b.lc_no
GROUP BY
a.lc_no
您使用的是SQL Server、PostgreSQL还是MySQL?它们都是不同的RDBMSsSQL Server或MySQL是okI删除了无关的数据库标记。请随意添加适合您实际使用的数据库的标记。数据通常存储在单个数据库中。在任何数据库问题中,正确识别您使用的数据库后端是获得正确答案的关键,尤其是在性能调整方面,特定于数据库的解决方案通常是最快的。什么数据库是您的后端真的很重要。您没有where子句,这些表将有多大?计算一个二百万记录表中的每一个总数将是缓慢的,不管你如何查询它。你可能想考虑在其中一个表中没有一行对应的行的可能性。@ Davide不工作。你能测试这个查询吗?它显示的是负值。是的,但是OP在子查询之外添加了内部联接,所以效果是一样的。你能发布结果吗?使用问题中公开的相同数据,我尝试使用sql FIDLE。