Основная ошибка подзапроса перед выполнением

0

Я не делаю этого с этим вопросом, и после нескольких попыток я не могу запустить. Просьба указать, что с этим связано, как я могу это исправить. Благодарю.

   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

  • 0
    Я подозреваю, что вы используете phpMyAdmin. Он добавляет LIMIT 0, 25 ко всем запросам, чтобы реализовать разбиение на страницы в средстве просмотра результатов.
  • 1
    Вы не можете ссылаться на подзапросы в UNION используя псевдонимы.
Теги:

1 ответ

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
  • 0
    оба запроса дают ошибку #1248 - Every derived table must have its own alias .
  • 0
    @Newbees он пропустил заключительные AS somealias после последней круглой скобки в каждом примере.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню