社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  DATABASE

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

robin • 5 年前 • 1486 次点击  

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
 
1486 次点击  
文章 [ 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 子句将得到任意行(甚至不是随机的)。