0

私はこのクエリを持っています:

SELECT COUNT(*) AS invoice_count, IFNULL(SUM(qa_invoices.invoice_total), 0)
AS invoice_total, IFNULL(SUM(qa_invoices.invoice_discount) ,0) AS invoice_discount
FROM qa_invoices
WHERE (DATE(qa_invoices.invoice_date) BETWEEN '12/06/25' AND '12/06/25') 
AND qa_invoices.status_code IN (5, 8)

UNION 

SELECT IFNULL(SUM(qa_returns.client_credit), 0) 
FROM qa_returns 
WHERE (DATE(qa_returns.returnlog_date) BETWEEN '12/06/25' AND '12/06/25');

エラーが発生します:

The used SELECT statements have a different number of columns.

この 2 つの選択を UNION コマンドで結合しようとしています。同じデータ条件を調べreturnlog_dateinvoice_date持っている場合、両方のクエリを 1 つに実行する方法があればより良いでしょう。

4

4 に答える 4

4

副選択を使用します。

SELECT
    COUNT(*) AS invoice_count,
    IFNULL(SUM(invoice_total), 0) AS invoice_total,
    IFNULL(SUM(invoice_discount), 0) AS invoice_discount,
    (
        SELECT IFNULL(SUM(qa_returns.client_credit), 0)
        FROM qa_returns
        WHERE qa_returns.returnlog_date >= '2012-06-25'
        AND qa_returns.returnlog_date < '2012-06-26'
    ) AS client_credit
FROM qa_invoices
WHERE invoice_date >= '2012-06-25'
AND invoice_date < '2012-06-26'
AND status_code IN (5, 8)
于 2012-06-26T20:10:21.900 に答える
4

UNIONエラーは、各クエリで同じ数の列を持たなければならないため、問題が何であるかを正確に示しています。

2 番目のクエリのどの列が最初のクエリに対応するかわかりませんが、2 番目のクエリにゼロを挿入できます。

このようなもの:

SELECT COUNT(*) AS invoice_count
    , IFNULL(SUM(qa_invoices.invoice_total), 0)  AS invoice_total
    , IFNULL(SUM(qa_invoices.invoice_discount) ,0) AS invoice_discount
FROM qa_invoices 
WHERE (DATE(qa_invoices.invoice_date) BETWEEN '12/06/25' AND '12/06/25') 
    AND qa_invoices.status_code IN (5, 8)

UNION 

SELECT 0
    , IFNULL(SUM(qa_returns.client_credit), 0) 
    , 0
FROM qa_returns 
WHERE (DATE(qa_returns.returnlog_date) BETWEEN '12/06/25' AND '12/06/25');
于 2012-06-26T20:09:20.147 に答える
1

UNIONを実行するには、同じ数の列が必要です。

于 2012-06-26T20:10:50.017 に答える
1

一緒に結合する結果セットは、まったく同じ列を持つ必要があります。

于 2012-06-26T20:09:15.707 に答える