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

Using an Alias on a Subquery and then doing a LEFT JOIN with it in the ON clause

此 MySQL SQL 声明传达了我正在尝试做的事情,但无效:

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

问题是在 ON 子句中,不允许使用别名。并且,从子查询中删除别名会产生错误,提示别名是必需的。非常第二十二条军规。

我在网上找到了很多示例,其中 JOIN 部分是一个子查询,并且别名确实在那里起作用。但是我还没有找到可以做到以上几点的东西。

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

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

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

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

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

您可能混淆了 "join" 别名和列别名。连接中的 subselect 就像它自己的 table,你也可以 select 来自 BigList 的不同列,所以 SomeThingTab 在我的版本中就像一个虚拟的动态 table.

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