2012-11-14 76 views
0

我有兩個表,其中包含兩種不同類型的發票。我需要創建一個查詢,從兩個表中統計每個客戶端的發票數量。如何連接兩個沒有任何關係的表?

此外,每個發票類型還有其他表格,這些表格包含關於將JOIN語句添加到每個SELECT語句的發票的信息。但這兩張表格不共享任何詳細的發票表格。

所以這就是模式的樣子: invoiceA與serviceInvoice和invoiceDetail有關係。 invoiceB與packageInvoice和supportInvoice有關係。

我沒有包含任何JOIN,但這是我的查詢看起來像什麼的粗略想法。

SELECT 
    i.client_id, COUNT(i.invoice_num) 
FROM 
(
    SELECT client_id, invoice_num, cff_num FROM invoiceA 
    UNION 
    SELECT client_id, invoice_num, cff_num FROM invoiceB 
)i 
WHERE 
    i.cff_num IS NULL 
GROUP BY 
    i.client_id 

該查詢似乎不可思議,效率低下,我想做一個留在invoiceB加入,但也有具有兩個表中相同的行CLIENT_ID。有什麼我可以做的,以優化這個?

+1

您使用的RDBMS是什麼? – Taryn

+0

我正在使用MS-SQL – samwell

+5

該查詢看起來既不奇怪也不低效。 –

回答

0

這些信息存儲在一個視圖,你可以從它只要你喜歡選擇:

SELECT 
    client_id, 
    COUNT(*) AS 'count' 
FROM invoiceA 
WHERE 
    cff_num IS NULL 
GROUP BY 
    client_id 

UNION 

SELECT 
    client_id, 
    COUNT(*) AS 'count' 
FROM invoiceB 
WHERE 
    cff_num IS NULL 
GROUP BY 
    client_id