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行;
为了工会和工会,你必须考虑以下几点
列还必须具有类似的数据类型
每个select语句中的列也必须按相同的顺序排列
因此,在两个表合并的情况下,最好使用表中的select all(select*)列,而不是像下面这样显式地使用列名
select col1,col2... coln from t1 union select col1,col2.....coln from t2
使用括号:
(select * from t_google_receipt limit 1) union (select * from t_old_google_receipt limit 1)ï¼
笔记:
union all
union
limit
order by
它实际上变了 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中,括号的要求是 强制执行的
要对单个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 子句将得到任意行(甚至不是随机的)。
ORDER BY