2016-02-12 63 views
0

我有两个表,如tnx_lc_invoicetnx_lc_payment。我想从这两个表中生成报告。如何优化多个表中的多个子查询?

表模式如下面的图像

tnx_lc_payment

enter image description here

tnx_lc_invoice

enter image description here

我想生成输出利柯以下图片

输出

enter image description here

我想下面的查询和它产生类似的输出。但我想优化此查询或任何替代解决方案,以获得更快的结果。

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 

如果还有其他替代方案,请让我知道。请提前致谢。

+0

您使用的是SQL Server,PostgreSQL还是MySQL?他们都是不同的RDBMS –

+0

SQL Server或MySQL是好的 – Faisal

+1

我删除了无关的数据库标签。随意添加适合您实际使用的数据库的标签。数据通常存储在单个数据库中。 –

回答

0

而不是使用子查询创建一个内部指导他们


之间

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 
因为它乘以行如果两个发票和付款会在同一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.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 
+0

您可能想考虑在其中一个表中存在行的可能性,而在另一个表中没有相应的行。 –

+0

@Davide无法使用。你可以测试这个查询吗?其显示出高昂的价值。 – Faisal

+0

是的,但OP在子查询外部添加了内部连接,所以效果相同。 –