在子查询上使用别名,然后在ON子句中使用它进行LEFT JOIN

时间:2015-09-16 19:25:58

标签: mysql sql left-join

这个MySQL SQL语句传达了我正在尝试做的事情,但无效:

SELECT * FROM 
  (SELECT DISTINCT Thing FROM BigList) AS SomeThing
  LEFT JOIN thingDetail ON SomeThing = thingDetail.Thing
  -- other left joins follow

问题是在ON子句中,不允许使用别名。并且,从子查询中删除别名会产生错误,需要别名。非常捕获22。

我在网上找到了很多例子,其中JOIN-part是子查询,别名在那里工作。但我还没有找到能够做到这一点的事情。

如果它在子查询的MySQL手册中,我就错过了它。我应该使用什么语法来执行此操作?

3 个答案:

答案 0 :(得分:3)

SELECT * FROM 
(SELECT DISTINCT Thing FROM BigList) AS SomeThing
LEFT JOIN thingDetail ON SomeThing.Thing = thingDetail.Thing
-- other left joins follow

您指的是table别名,而不是表中的column

答案 1 :(得分:1)

您忘记在thing子句中添加列名ON。它应该像

SELECT * FROM 
  (SELECT DISTINCT Thing FROM BigList) AS SomeThing
  LEFT JOIN thingDetail ON SomeThing.Thing = thingDetail.Thing

答案 2 :(得分:1)

你可能已经混淆了"加入"列别名的别名。联接中的subselect就像它自己的表一样,您也可以从BigList中选择不同的列,因此我的版本中的SomeThingTab就像一个虚拟的动态表。

SELECT * FROM 
  (SELECT DISTINCT Thing as SomeThing FROM BigList) AS SomeThingTab
  LEFT JOIN thingDetail ON SomeThingTab.SomeThing = thingDetail.Thing