任何人都可以给我一个提示,为什么以下查询会引发语法错误?
SELECT *
FROM
(
( SELECT cu.ID id
, name
, ego_id
, u.fb_id
FROM contact_users cu
JOIN users u
ON cu.ego_id = u.ID
) temp
LEFT
JOIN fb_user
ON temp.fb_id = fb_user.user_fb_id
) T4
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds
to your MySQL server version for the right syntax to use near 'T4'...
如果我删除 T4
everthing是可以的。
我正在使用MySQL 5.5.47
为什么以下查询会引发语法错误?
因为如果不存在,则不能别名内联视图。
删除T4时,引擎只需查看()以进行操作。当您添加别名时,它假设存在一个形成良好的内联视图,从而寻找不存在的适当语法(至少选择)。
简单地说:
别名t4没有选择或来自;解决这个问题:
- 添加它们
- 删除初始
(
和结束) T4
(不需要它们) - 重构SQL(为什么首先是直列视图?不需要。)
更多详细信息
您的温度别名有效,因为它是一个可以自行运行的完整而准确的查询。
SELECT cu.ID id
, name
, ego_id
, u.fb_id
FROM contact_users cu
JOIN users u
ON cu.ego_id = u.ID
其中:
( SELECT cu.ID id
, name
, ego_id
, u.fb_id
FROM contact_users cu
JOIN users u
ON cu.ego_id = u.ID
) temp
LEFT
JOIN fb_user
ON temp.fb_id = fb_user.user_fb_id
不是一个完整而准确的SQL语句来生成结果集。如您所见,这缺少关键字"选择"one_answers"来自"。我想您可以消除左连接,但它会起作用,但我认为这不会达到所需的结果。
通过消除T4,引擎不会试图将()作为有效的SQL语句解析,而是将其视为()的操作顺序,并且既然()don''T在外部部分上的物质发动机不会感知语法错误。
具有Query 1
或Query 2
查询1
SELECT *
FROM
(
SELECT *
FROM
(
SELECT cu.ID as id, name, ego_id, u.fb_id
FROM contact_users as cu
JOIN users as u
ON cu.ego_id = u.ID
) temp
LEFT OUTER JOIN fb_user
ON temp.fb_id = fb_user.user_fb_id
) T4
查询2
SELECT cu.ID as id, name, ego_id, u.fb_id, fb_user.*
FROM contact_users as cu
JOIN users as u
ON cu.ego_id = u.ID
LEFT OUTER JOIN fb_user
ON u.fb_id = fb_user.user_fb_id
我更喜欢查询2