这是来自https://stackoverflow.com/a/2213199/3284469的查询,它获取表索引的信息。
为什么我们有两个别名,分别是pg_class
和pg_class t
的{{1}}?
pg_class i
可以替换为i.oid = ix.indexrelid
吗?
谢谢。
t.oid = ix.indexrelid
答案 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的重要一步。集合可能由表,表的子集或由表组成的另一个查询,其他查询或常量或组合表示。
在这种情况下,基础表是多态的-它存储许多不同类型的数据。因此,子集用于引用表中的不同信息。