0

2 種類の請求書を保持する 2 つのテーブルがあります。両方のテーブルからクライアントごとの請求書の数をカウントするクエリを作成する必要があります。

また、各請求書タイプには、JOIN ステートメントが各 SELECT ステートメントに追加された請求書に関する情報を保持する他のテーブルがあります。ただし、2 つのテーブルは詳細な請求テーブルを共有していません。

これがスキーマの外観です。invoiceA は、serviceInvoice およびinvoiceDetail と関係があります。請求書 B には、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 を持つ行があります。これを最適化するためにできることはありますか?

4

1 に答える 1

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
于 2012-11-16T03:19:01.567 に答える