【问题标题】:MySQL Error with SELECT * FROM (SELECT *...)SELECT * FROM (SELECT *...) 的 MySQL 错误
【发布时间】: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


【解决方案1】:

删除作为关键字并尝试,

SELECT xxx.*
FROM 
     (
          SELECT * FROM  MyTable_sauv_01
          UNION
          SELECT * FROM  MyTable_sauv_02
     ) xxx,
     reservation r, 
     user u
WHERE r.id_user = u.id
AND   r.id = xxx.id

【讨论】:

  • 总是那些“尝试”的答案,我可以告诉你删除 AS 关键字不会有帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-06-17
  • 2013-12-17
  • 2018-09-21
  • 2012-10-05
  • 1970-01-01
  • 2019-05-16
  • 1970-01-01
相关资源
最近更新 更多