使用别名的 SQL LEFT JOIN

Posted

技术标签:

【中文标题】使用别名的 SQL LEFT JOIN【英文标题】:SQL LEFT JOIN using alias name 【发布时间】:2017-12-22 07:34:39 【问题描述】:

刚开始研究 Oracle SQL 并尝试使用左连接。出现以下错误,请帮助。

select usr_grpid as "usr_role_role_id" 
from users 
left join user_role on users.usr_role_role_id = user_role.usr_role_role_id;

错误信息:

ORA-00904: "USERS"."USR_ROLE_ROLE_ID": 无效标识符 00904. 00000 - "%s: 无效标识符"

虽然数据相同,但实际上第一个表的列名与第二个表的列名不同。

【问题讨论】:

不要在连接中使用列的别名,而是使用实际的列名。 除了其他人所说的,如果你只选择连接列,做外连接有点没有意义。希望这只是一个示例来演示您的问题,而您的实际查询中包含更多列? 【参考方案1】:
select usr_grpid as "usr_role_role_id" 
from `users` 
left join user_role on `users`.usr_role_role_id = user_role.usr_role_role_id;

select usr_grpid as "usr_role_role_id" 
from users usr
left join user_role on usr.usr_role_role_id = user_role.usr_role_role_id;

【讨论】:

【参考方案2】:

试试这个:-

select users.usr_grpid
from users 
left join user_role on users.usr_grpid = user_role.usr_grpid;

注意: 请不要在连接中使用列的别名,而是使用实际的列名。

【讨论】:

【参考方案3】:

除了不使用 allian is join 条件,由于两个表使用相同的列连接,你也可以使用NATURAL LEFT JOIN

SELECT usr_grpid
FROM users 
NATURAL LEFT JOIN user_role;

但是为每个表设置别名以指定从哪个表中获取值会很有帮助。

类似这样的:

SELECT a.usr_grpid
FROM users a
NATURAL LEFT JOIN user_role b;

【讨论】:

我建议不要使用自然连接,因为这意味着如果将列添加到与另一个表中的列之一共享名称的表中,您的连接条件将会改变.此外,如果您不知道表的结构,它会使查询更难理解。

以上是关于使用别名的 SQL LEFT JOIN的主要内容,如果未能解决你的问题,请参考以下文章

如何在 MySQL LEFT JOIN 中使用别名

我厚吗? MySQL:LEFT JOIN 上的“不是唯一的表/别名”

PySpark Self Join 没有别名

mysql中多个left join子查询写法以及别名用法

SQL语句中,为啥where子句不能使用列别名,而order by却可以?

Sql_join left right