2016-02-12 74 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在子查詢外部添加了內部連接,所以效果相同。 –