在mysql Query中为UNION SELECT组合WHERE子句

Saq*_*qib 1 mysql

我有一个查询,我使用UNION从两个表中获取数据,它显示正确,但问题来自我必须选择不同的日期间隔来显示这些日期之间的数据,会发生的是,它只需要一个where子句并应用在那个单独的SELECT部分​​而不是整个查询.我需要将其应用于wholle ......怎么样?

SELECT
    TICKETS.TICKETID AS TICKET_NO,
    RECEIPTS.DATENEW AS DATENEW,
    PAYMENTS.TOTAL AS MONEY,
    CUSTOMERS.NAME AS CUSTOMER,
    PAYMENTS.PAYMENT AS PAYMENT
FROM RECEIPTS
    LEFT JOIN TICKETS ON RECEIPTS.ID = TICKETS.ID
    LEFT JOIN PAYMENTS ON RECEIPTS.ID = PAYMENTS.RECEIPT
    LEFT JOIN CUSTOMERS ON TICKETS.CUSTOMER = CUSTOMERS.ID
WHERE ?(QBF_FILTER)
UNION SELECT
    ADJUSTMENTS.TICKET_NO AS TICKET_NO,
    ADJUSTMENTS.DATE AS DATENEW,
    ADJUSTMENTS.ADJUSTMENT_AMOUNT AS MONEY,
    ADJUSTMENTS.CUSTOMER_NAME AS CUSTOMER,
    ADJUSTMENTS.ADJUSTMENT_TYPE AS PAYMENT
FROM ADJUSTMENTS
    LEFT JOIN CUSTOMERS ON CUSTOMERS.ID = ADJUSTMENTS.CUSTOMER_ID
    WHERE ?(QBF_FILTER)
Run Code Online (Sandbox Code Playgroud)

>>>>上面的查询来自UNICENTA开源代码项目,该项目使用.bs文件生成报告,当我在两个选择部分放置WHERE子句时会产生SQL语法错误,现在我上面讨论的问题就是我需要的谢谢:|

Sta*_*oid 5

您可以使用嵌套的Select来完成此操作:

SELECT * FROM (
    SELECT
        TICKETS.TICKETID AS TICKET_NO,
        RECEIPTS.DATENEW AS DATENEW,
        PAYMENTS.TOTAL AS MONEY,
        CUSTOMERS.NAME AS CUSTOMER,
        PAYMENTS.PAYMENT AS PAYMENT
    FROM RECEIPTS
        LEFT JOIN TICKETS ON RECEIPTS.ID = TICKETS.ID
        LEFT JOIN PAYMENTS ON RECEIPTS.ID = PAYMENTS.RECEIPT
        LEFT JOIN CUSTOMERS ON TICKETS.CUSTOMER = CUSTOMERS.ID
    WHERE ?(QBF_FILTER)
    UNION SELECT
        ADJUSTMENTS.TICKET_NO AS TICKET_NO,
        ADJUSTMENTS.DATE AS DATENEW,
        ADJUSTMENTS.ADJUSTMENT_AMOUNT AS MONEY,
        ADJUSTMENTS.CUSTOMER_NAME AS CUSTOMER,
        ADJUSTMENTS.ADJUSTMENT_TYPE AS PAYMENT
    FROM ADJUSTMENTS
        LEFT JOIN CUSTOMERS ON CUSTOMERS.ID = ADJUSTMENTS.CUSTOMER_ID
        WHERE ?(QBF_FILTER)
    )
WHERE (yourDate between Date1 and Date2)
Run Code Online (Sandbox Code Playgroud)

编辑:我想它需要更像:

SELECT * FROM (
    SELECT
        TICKETS.TICKETID AS TICKET_NO_REC,
        RECEIPTS.DATENEW AS DATENEW_REC,
        PAYMENTS.TOTAL AS MONEY_REC,
        CUSTOMERS.NAME AS CUSTOMER_REC,
        PAYMENTS.PAYMENT AS PAYMENT_REC
    FROM RECEIPTS
        LEFT JOIN TICKETS ON RECEIPTS.ID = TICKETS.ID
        LEFT JOIN PAYMENTS ON RECEIPTS.ID = PAYMENTS.RECEIPT
        LEFT JOIN CUSTOMERS ON TICKETS.CUSTOMER = CUSTOMERS.ID
    UNION SELECT
        ADJUSTMENTS.TICKET_NO AS TICKET_NO_ADJ,
        ADJUSTMENTS.DATE AS DATENEW_ADJ,
        ADJUSTMENTS.ADJUSTMENT_AMOUNT AS MONEY_ADJ,
        ADJUSTMENTS.CUSTOMER_NAME AS CUSTOMER_ADJ,
        ADJUSTMENTS.ADJUSTMENT_TYPE AS PAYMENT_ADJ
    FROM ADJUSTMENTS
        LEFT JOIN CUSTOMERS ON CUSTOMERS.ID = ADJUSTMENTS.CUSTOMER_ID
    )
WHERE ?(QBF_FILTER)
Run Code Online (Sandbox Code Playgroud)