【发布时间】:2017-05-17 10:23:51
【问题描述】:
我的学员创建了一个 SQL 请求(使用 MySQL),例如:
SELECT xxx.*
FROM reservation r,
user u,
(
SELECT * FROM MyTable_sauv_01
UNION
SELECT * FROM MyTable_sauv_02
) AS xxx
WHERE r.id_user = u.id
AND r.id = xxx.id
当他要执行这个请求时:mysql错误(未执行)。
如果他把“tables”放在它的xxx“reformatted table”之后,请求就会被执行:
SELECT xxx.*
FROM
(
SELECT * FROM MyTable_sauv_01
UNION
SELECT * FROM MyTable_sauv_02
) AS xxx,
reservation r,
user u
WHERE r.id_user = u.id
AND r.id = xxx.id
我知道这个请求没有很好地实现(他必须使用 JOIN 来链接表,我必须向他解释它太 baaaad)但是我问我为什么 MySQL 只在其他表之后才执行请求(SELECT * FROM ... UNION SELECT * FROM ...) ?
感谢您的回复:)
【问题讨论】:
-
请阅读现代 ANSI 连接语法,您在此处使用的方法很旧而且很难阅读。
-
请在两个 qeuries 上发布 EXPLAIN 的输出。
-
我尝试重新创建此错误但失败了 (rextester.com/BDMBO38348)。这里一定有其他事情发生。
-
关于其他内容的想法:(1) 实际代码中的错别字在此处的问题中不存在,(2) 您正在尝试检查语法的环境中运行代码在发送到数据库引擎之前,但它出错了,(3)您的数据/数据类型中的一些奇怪之处使其成为一种特殊情况,(4)您正在运行的 MySQL 版本存在错误,(5)其他我想不到的东西。选项(4)似乎不太可能。依次进行(不一定按顺序),并用更多详细信息更新您的问题......或者如果您找到了解释,请添加您自己的答案。
标签: mysql sql union multiple-tables