UNION SELECT CONCAT работает по-разному между MariaDB / MySQL - PullRequest
0 голосов
/ 30 июня 2019

Я недавно перенес приложение из MySQL 5.5 в MariaDB 10.3. Частью приложения является календарь событий, в который пользователи могут добавлять свои собственные события, например, адрес, город и т. Д.

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

Я попытался вернуться к MySQL 5.5, и запрос снова работает. Я также запустил запрос в phpMyadmin на MariaDB 10.3, и он показывает те же результаты, но заканчивается ошибкой:

ОШИБКА 1064: у вас ошибка в синтаксисе SQL; проверьте руководство для правильный синтаксис для использования возле 'UNION SELECT CONCAT (title_clang_1,' - ', улица,' ', почтовый индекс,' ', район,' ', город,' в строке 1

Это запрос:

SELECT
  'choose' label,
  '' id
FROM
  table_events
LIMIT
  1
UNION
SELECT
  CONCAT(
    title_clang_1,
    ' - ',
    street,
    ' ',
    zip,
    ' ',
    district,
    ' ',
    town,
    ' ',
    additional
  ) label,
  id
FROM
  table_events
WHERE
  offline IS NULL || offline = '|0|'

Таблица «table_events» содержит все перечисленные здесь столбцы: id, title_clang_1, улица, почтовый индекс, район, город, дополнительные - и другие, не относящиеся к этому запросу.

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

1 Ответ

3 голосов
/ 30 июня 2019

Я почти уверен, что этот ваш запрос не будет работать и в MySQL (в более новых версиях по крайней мере). Документация MySQL четко гласит:

Чтобы применить ORDER BY или LIMIT к отдельному SELECT, поместите предложение в скобках, которые заключают в себе SELECT

Вам необходимо использовать скобки вокруг отдельных SELECT блоков запроса, так как вы используете LIMIT в первом запросе:

(
SELECT
  'choose' label,
  '' id
FROM
  table_events
LIMIT
  1
)
UNION
(
SELECT
  CONCAT(
    title_clang_1,
    ' - ',
    street,
    ' ',
    zip,
    ' ',
    district,
    ' ',
    town,
    ' ',
    additional
  ) label,
  id
FROM
  table_events
WHERE
  offline IS NULL || offline = '|0|'
)
...