如何加入两个没有任何关系的表?

时间:2012-11-14 20:57:47

标签: sql sql-server

我有两张桌子,里面有两种不同类型的发票。我需要创建一个查询,从两个表中计算每个客户端的发票数量。

此外,每种发票类型都有其他表,其中包含有关在每个SELECT语句中添加JOIN语句的发票的信息。但是这两个表没有共享任何详细的发票表。

这就是架构的样子: 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上进行LEFT JOIN,但是有些行在两个表中都有相同的client_id。有什么我可以做的来优化这个吗?

1 个答案:

答案 0 :(得分: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