执行前子查询基本错误

时间:2018-01-24 23:24:58

标签: mysql sql

我不知道这个问题是什么问题,经过多次尝试后我无法运行。请指出这是错误的,我该如何解决这个问题。感谢。

   SELECT 
     cd.dr
    FROM
    (
     (SELECT SUM(cc.credit_amount) AS cr FROM cust_credit cc) cc
      UNION  
     (SELECT  SUM(cd.debit_amount) AS dr FROM cust_debit cd ) cd  
     )

错误是。

  

#1064 - 您的SQL语法出错;查看与您的MariaDB服务器版本对应的手册,以获得正确的语法,以便在附近使用  cd)LIMIT 0,25'在第7行

1 个答案:

答案 0 :(得分:3)

您无法在UNION中为子查询提供别名,并且您无法使用别名来引用子查询的结果。 UNION中的列别名总是来自第一个子查询中的别名,因此您无法引用dr

你能做的是:

SELECT amount
FROM (
    SELECT 'cc' AS type, SUM(credit_amount) as amount FROM cust_credit
    UNION ALL
    SELECT 'cd' AS type, SUM(debit_amount) AS amount FROM cust_debit
) x
WHERE type = 'cd'

或者您可以将查询放在UNION列表中,而不是使用SELECT

SELECT dr AS amount
FROM (
    SELECT (SELECT SUM(credit_amount) FROM cust_credit) AS cr,
           (SELECT SUM(debit_amount) FROM cust_debit) AS dr
) x