MariaDB выдает ошибку 1054, как ее исправить? - PullRequest
0 голосов
/ 07 мая 2020

Итак, я много лет работал с системой с несколькими клиентами и установил ее на сервере с MariaDB 10.3.22. Он продолжает выдавать мне ошибки с такими запросами:

SELECT *
  FROM ( (SELECT facturaaid 
         FROM vtiger_facturaa 
         INNER JOIN vtiger_crmentity ON crmid = facturaaid 
         WHERE facturaaid=46747) 
       UNION ALL 
       (SELECT IFNULL(idfactura,0)
        FROM vtiger_cobranza 
        WHERE idfactura=46747 
  GROUP BY idfactura) ) AS tabla      
WHERE facturaaid > 0;

Это ошибка

Error

Обратите внимание, что во втором подзапросе у него нет псевдонима в выбранном столбце. Я говорю это, потому что когда я это записываю, это работает отлично. Но если я напишу второй выбор, например, «SELECT idfactura», он будет работать нормально, поэтому проблема (я полагаю) работает над столбцом, а не дает ему псевдоним. Я имею в виду, что следующий запрос работает хорошо.

SELECT *
  FROM ( (SELECT facturaaid 
         FROM vtiger_facturaa 
         INNER JOIN vtiger_crmentity ON crmid = facturaaid 
         WHERE facturaaid=46747) 
       UNION ALL 
       (SELECT IFNULL(idfactura,0) as facturaaid
        FROM vtiger_cobranza 
        WHERE idfactura=46747 
  GROUP BY idfactura) ) AS tabla      
WHERE facturaaid > 0;

Или этот:

SELECT *
  FROM ( (SELECT facturaaid 
         FROM vtiger_facturaa 
         INNER JOIN vtiger_crmentity ON crmid = facturaaid 
         WHERE facturaaid=46747) 
       UNION ALL 
       (SELECT facturaaid 
        FROM vtiger_cobranza 
        WHERE idfactura=46747 
  GROUP BY idfactura) ) AS tabla      
WHERE facturaaid > 0;

Кроме того, я не пишу никаких предложений ORDER, я не понимаю, почему я должен напишите псевдоним, чтобы он заработал. Проблема в том, что это не единственный такой запрос во всей системе, поэтому я не могу исправить их все, это будет гигантская c трата времени.

Итак, мой вопрос: нужно ли мне понижать версию сервера mariadb (в более старых версиях серверов mysql работает отлично, например Mysql 5)? или есть какое-то исправление конфигурации, которого я не знаю?

1 Ответ

1 голос
/ 07 мая 2020

Второй UNION имеет вид:

SELECT IFNULL(idfactura,0)
FROM vtiger_cobranza 
WHERE idfactura=46747 
GROUP BY idfactura

Сообщение об ошибке относится к GROUP BY. Вы, вероятно, захотите написать это как:

SELECT DISTINCT idfactura
FROM vtiger_cobranza 
WHERE idfactura=46747 

IFNULL - не имеет смысла, поскольку idfactura не может быть NULL из-за условия. Если вы действительно хотите использовать GROUP BY и IFNULL (чего не следует делать, поскольку в запросе нет агрегатных функций), вам следует использовать полное определение столбца, как в SELECT:

SELECT IFNULL(idfactura,0)
FROM vtiger_cobranza 
WHERE idfactura=46747 
GROUP BY IFNULL(idfactura,0)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...