Py学习  »  DATABASE

mysql8.0_159;之后,在联合之前不能再使用mysql查询语法错误_

robin • 5 年前 • 1489 次点击  

SQL

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

我代码中的SQL在我的旧MySQL中执行成功(服务器版本:5.6.17-log MySQL Community Server(GPL)),但在更新到MySQlgroup(服务器版本:8.0.11 MySQL Community Server-GPL)后执行失败,

错误1064(42000):SQL语法中有错误;请检查 与右边mysql服务器版本相对应的手册 在'union select*from t_old_google_receipt limit 1'附近使用的语法 在第1行;

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/40786
 
1489 次点击  
文章 [ 3 ]  |  最新文章 5 年前
Zaynul Abadin Tuhin
Reply   •   1 楼
Zaynul Abadin Tuhin    6 年前

为了工会和工会,你必须考虑以下几点

  1. union中的每个select语句必须具有相同的 柱
  2. 列还必须具有类似的数据类型

  3. 每个select语句中的列也必须按相同的顺序排列

因此,在两个表合并的情况下,最好使用表中的select all(select*)列,而不是像下面这样显式地使用列名

 select col1,col2... coln from t1
 union 
 select col1,col2.....coln from t2
jarlh
Reply   •   2 楼
jarlh    6 年前

使用括号:

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

笔记:

  • 你可能想要 union all 而不是 union .
  • 使用 limit 没有 order by 是可疑的。
  • 这假设两个表中的列是相同的,以相同的顺序定义,并且具有兼容的类型。
Álvaro González
Reply   •   3 楼
Álvaro González    6 年前

它实际上变了 MySQL 5.7 :

要对单个select应用order或limit,请放置子句 在包含选择的圆括号内:

(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 子句将得到任意行(甚至不是随机的)。