(SELECT 1 `a`) UNION (SELECT 2 `a`) ORDER BY `a` DESC LIMIT 1
在 MySQL 中是一个完全有效的查询,据我所知
SELECT 1 `a` UNION SELECT 2 `a` ORDER BY `a` DESC LIMIT 1
然而,
SELECT *, ((SELECT 1 `a`) UNION (SELECT 2 `a`) ORDER BY `a` DESC LIMIT 1) `a` FROM `customers`
会出现错误。
您的 SQL 语法有错误;请检查与您的 MySQL 服务器版本相对应的手册,以了解在“UNION (SELECT 2 `a`) ORDER BY `a` DESC LIMIT 1) `a` FROM `customers` 附近使用的正确语法
和
SELECT *, (SELECT 1 `a` UNION SELECT 2 `a` ORDER BY `a` DESC LIMIT 1) `a` FROM `customers`
是有效的。
有人能解释一下为什么吗?还是我遇到了 MySQL 中的错误?
补充:这仅适用于 MySQL 5.7。MySQL 8 运行良好。
UNION
与 MySQL 5.x 相比,MySQL 8.0 中的实现确实有所不同。请参阅https://dev.mysql.com/doc/refman/8.0/en/union.html,“MySQL 8.0 与 MySQL 5.7 中的 UNION 处理比较”部分
阅读该文档页面以了解更多详细信息。
同样有用的参考:https ://dev.mysql.com/doc/refman/8.0/en/parenthesized-query-expressions.html
对于某些子查询运算符,MySQL 不支持子查询中的 LIMIT:
手动的