为什么自连接语法如此奇怪?

boi*_*ert 0 sql database

我在这里重复一个学生问题.我已经给出了某种解释,但希望你有更好,更清晰的解释.

使用表的两个别名完成自联接:

SELECT parent.Name, child.Name
FROM Person parent
INNER JOIN Person child ON parent.Id = child.ParentId
Run Code Online (Sandbox Code Playgroud)

但这听起来好像我们让事情变得复杂.所以:

(1)真的需要别名吗?为什么?

(2)从技术上讲,只使用一个别名是可能的.为什么所有示例,在线,教科书,教程,总是使用两个别名?

Cor*_*bin 6

1)是的,你必须至少有一个别名.否则,你怎么知道哪个表版本是哪个?

2)你可以使用一个别名.两个并非绝对必要.使用两个别名几乎总是比一个别名更清晰.

哪个更容易理解?

SELECT parent.Name, child.Name
FROM Person parent
INNER JOIN Person child ON parent.Id = child.ParentId
Run Code Online (Sandbox Code Playgroud)

要么

SELECT Person.Name, child.Name
FROM Person
INNER JOIN Person child ON Person.Id = child.ParentId
Run Code Online (Sandbox Code Playgroud)

第一个显示意图更好.


顺便说一句,您可能也希望为列添加别名.虽然结果中具有相同名称的两列很好,但它可能会令人困惑,如果您尝试将结果行放入客户端代码中的某种关联容器中,它将会中断.因此,例如,更好的查询版本将是:

SELECT parent.Name ParentName, child.Name ChildName
FROM Person parent
INNER JOIN Person child ON parent.Id = child.ParentId
Run Code Online (Sandbox Code Playgroud)