为什么在同一查询中对表使用两次别名?

时间:2018-07-07 23:26:33

标签: sql postgresql

这是来自https://stackoverflow.com/a/2213199/3284469的查询,它获取表索引的信息。

为什么我们有两个别名,分别是pg_classpg_class t的{​​{1}}?

pg_class i可以替换为i.oid = ix.indexrelid吗?

谢谢。

t.oid = ix.indexrelid

1 个答案:

答案 0 :(得分:6)

在查询中常见的情况是对表进行两次别名,这时您需要引用同一张表中的两个不同的记录。

常见情况是表具有自身指针,例如每个员工指向经理的员工-另一个员工。 Viz:

EmpID   Name         ManagerID
1       John Boss    NULL
2       Mary Manager 1
3       Brian        2
4       Simon        2
5       Susan        2

在上表中,约翰是老板,玛丽向约翰报告,另外三名员工向玛丽报告。

如果要获取每个员工及其老板的列表,则需要对表进行两次别名:

SELECT worker.Name, boss.ManagerName
FROM 
    Employees AS worker
    LEFT JOIN Employees as boss ON worker.ManagerID = boss.EmpID

您还可以将其用于汇总每个监督层等下的员工薪金成本。

因此,在您的问题中,不,您不能用一个替换另一个,因为您实际上是在引用表中的另一组记录。

您需要将SQL视为数据集,而不是表。这是学习优质SQL的重要一步。集合可能由表,表的子集或由表组成的另一个查询,其他查询或常量或组合表示。

在这种情况下,基础表是多态的-它存储许多不同类型的数据。因此,子集用于引用表中的不同信息。