【问题标题】:Error when ordering an UNION MySQL query订购 UNION MySQL 查询时出错
【发布时间】:2016-11-09 13:18:45
【问题描述】:

以下查询引发错误:#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'UNION (' at line 15

这是查询:

(SELECT 'receivables'       AS entry_type, 
        rp.amount_recieved  AS amount, 
        rp.rp_id            AS payment_document_id, 
        rp.paidwith         AS payment_type, 
        rp.payment_doc_date AS payment_document_date, 
        r.id                AS document_id, 
        c.comp_name         AS company 
 FROM   receivables_payments rp, 
        receivables r, 
        comp_companies c 
 WHERE  rp.r_id = r.id 
        AND r.supplier = c.comp_id 
        AND r.beneficiary_id = '1' 
        AND rp.payment_doc_date BETWEEN '2016-10-01' AND '2016-11-09') 
UNION 
(SELECT 'payables'          AS entry_type, 
        pp.amount_recieved  AS amount, 
        pp.pp_id            AS payment_document_id, 
        pp.paidwith         AS payment_type, 
        pp.payment_doc_date AS payment_document_date, 
        p.id                AS document_id, 
        c.comp_name         AS company 
 FROM   payables_payments pp, 
        payables p, 
        comp_companies c 
 WHERE  pp.p_id = p.id 
        AND p.supplier = c.comp_id 
        AND p.beneficiary_id = '1' 
        AND pp.payment_doc_date BETWEEN '2016-10-01' AND '2016-11-09') 
ORDER  BY payment_document_date DESC 

请有人告诉我它有什么问题吗?因为我没看到。

谢谢。

【问题讨论】:

    标签: mysql sql-order-by union


    【解决方案1】:

    尝试在外部查询中排序

    SELECT * FROM (
    (SELECT 'receivables'       AS entry_type, 
            rp.amount_recieved  AS amount, 
            rp.rp_id            AS payment_document_id, 
            rp.paidwith         AS payment_type, 
            rp.payment_doc_date AS payment_document_date, 
            r.id                AS document_id, 
            c.comp_name         AS company 
     FROM   receivables_payments rp, 
            receivables r, 
            comp_companies c 
     WHERE  rp.r_id = r.id 
            AND r.supplier = c.comp_id 
            AND r.beneficiary_id = '1' 
            AND rp.payment_doc_date BETWEEN '2016-10-01' AND '2016-11-09') 
    UNION 
    (SELECT 'payables'          AS entry_type, 
            pp.amount_recieved  AS amount, 
            pp.pp_id            AS payment_document_id, 
            pp.paidwith         AS payment_type, 
            pp.payment_doc_date AS payment_document_date, 
            p.id                AS document_id, 
            c.comp_name         AS company 
     FROM   payables_payments pp, 
            payables p, 
            comp_companies c 
     WHERE  pp.p_id = p.id 
            AND p.supplier = c.comp_id 
            AND p.beneficiary_id = '1' 
            AND pp.payment_doc_date BETWEEN '2016-10-01' AND '2016-11-09')) t1
    ORDER  BY payment_document_date DESC;
    

    希望这能解决您的问题。

    【讨论】:

    • 我已经试过了,但错误是#1248 - Every derived table must have its own alias
    • 然后为派生表提供别名。我已编辑我的答案以包含别名。
    • 哦,就是这样!它现在可以工作了,但是当我看到这个错误时,我尝试为每个选择添加一个别名,当然它没有工作。谢谢。
    • 如果可行,请将其作为对其他人有帮助的最佳答案。
    • 将在 4 分钟后执行此操作。所以在那之前不允许这样做。
    猜你喜欢
    • 2016-12-27
    • 2013-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-01
    • 1970-01-01
    • 2016-02-29
    • 1970-01-01
    相关资源
    最近更新 更多