SQL:
select * from t_google_receipt limit 1 union select * from t_old_google_receipt limit 1;
在我的旧mysql(服务器版本:5.6.17-log MySQL社区服务器(GPL))中,代码中的sql成功执行,但是在更新为mysqlGroup(服务器版本:8.0.11 MySQL社区服务器-GPL)之后,它失败了,
错误1064(42000):您的SQL语法有错误;检查 与您的MySQL服务器版本相对应的手册 在“联合选择*从t_old_google_receipt限制1”附近使用的语法 在第1行;
答案 0 :(得分:2)
它实际上在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
子句,则会得到任意行(甚至不是随机行)。
答案 1 :(得分:1)
使用括号:
(select * from t_google_receipt limit 1)
union
(select * from t_old_google_receipt limit 1);
注意:
union all
而不是union
。limit
的情况下使用order by
是可疑的。答案 2 :(得分:0)
对于工会和工会,您必须考虑以下几点
这些列还必须具有相似的数据类型
每个SELECT语句中的列也必须顺序相同
因此,在有两个表联合的情况下,使用表中的全选(select *)列是一种不好的做法,而像下面这样显式地使用列名是更可取的,并且错误更少。
select col1,col2... coln from t1
union
select col1,col2.....coln from t2