联合MySQL的问题

联合MySQL的问题,mysql,sql,database,select,union,Mysql,Sql,Database,Select,Union,我有一个疑问: 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/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.

我正在尝试使用UNION命令将这2个选择连接起来,如果我们查看returnlog\u date和invoice\u date是否具有相同的数据条件,如果有任何方法将这两个查询执行为一个查询会更好。

结果集您联合在一起必须具有完全相同的列。

错误告诉您确切的问题是什么,对于联合,每个查询中的列数必须相同

我不确定第二个查询中的哪一列对应于第一个查询,但可以在第二个查询中插入零

大概是这样的:

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');
使用子选择:

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)

为了实现联合,你需要有相同数量的列

@JohnNuñez:你建议的编辑将阻止对WHERE子句使用索引范围扫描,这可能会使查询速度变慢。你确定要这样做吗?我不知道他们阻止使用索引会影响查询的优化,请忽略我的建议谢谢。