在子查询上使用别名,然后在 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
此 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