我有两张桌子,里面有两种不同类型的发票。我需要创建一个查询,从两个表中计算每个客户端的发票数量。
此外,每种发票类型都有其他表,其中包含有关在每个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。有什么我可以做的来优化这个吗?
答案 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