Синтаксическая ошибка запроса mysql. LIMIT больше не может использоваться до UNION после mysql8.0. - PullRequest
0 голосов
/ 05 ноября 2018

SQL:

select * from t_google_receipt limit 1 union select * from t_old_google_receipt limit 1;

sql в моем коде извиняется успешно в моем старом mysql (версия сервера: MySQL Community Server (GPL) 5.6.17-log), но после обновления до mysqlGroup (версия сервера: MySQL Community Server 8.0.11 - GPL), это оправдано не удалось,

ОШИБКА 1064 (42000): у вас ошибка в синтаксисе SQL; проверить руководство, которое соответствует вашей версии сервера MySQL для права синтаксис для использования рядом с 'union select * from t_old_google_receipt limit 1' в строке 1;

Ответы [ 3 ]

0 голосов
/ 05 ноября 2018

Для союза и единства все, что вы должны рассмотреть ниже пункта

  1. Каждый оператор SELECT в UNION должен иметь одинаковое количество Столбцы
  2. Столбцы также должны иметь похожие типы данных

  3. Столбцы в каждой инструкции SELECT также должны быть в том же порядке

Так что в случае объединения двух таблиц плохой практикой является использование столбца select all (select *) из таблицы, а предпочтительнее и меньше ошибок использовать имя столбца в явном виде, как показано ниже

 select col1,col2... coln from t1
 union 
 select col1,col2.....coln from t2
0 голосов
/ 05 ноября 2018

Это действительно изменилось в MySQL 5.7 :

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

(SELECT a FROM t1 WHERE a=10 AND B=1 ORDER BY a LIMIT 10)
UNION
(SELECT a FROM t2 WHERE a=11 AND B=2 ORDER BY a LIMIT 10);

Примечание

Предыдущие версии MySQL могут разрешать такие заявления без скобки. В MySQL 5.7 требование к круглым скобкам Насильственные.

В любом случае, будьте осторожны, если вы не предоставите отдельные предложения ORDER BY, вы получите произвольные строки (даже не случайные).

0 голосов
/ 05 ноября 2018

Используйте скобки:

(select * from t_google_receipt limit 1)
union
(select * from t_old_google_receipt limit 1);

Примечания:

  • Вы, вероятно, хотите union all, а не union.
  • Использование limit без order by является подозрительным.
  • Предполагается, что столбцы в двух таблицах одинаковы, определены в одинаковом порядке и имеют совместимые типы.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...