ORDER BY Oracle 中的串联名称?
Posted
技术标签:
【中文标题】ORDER BY Oracle 中的串联名称?【英文标题】:ORDER BY a concatenated name in Oracle? 【发布时间】:2011-09-20 10:27:26 【问题描述】:我有一个名为 USERS 的表,我从中获取员工的名字和姓氏,并将它们作为一个名字打印出来。如何在这些数据上正确使用 ORDER BY?
这是我所拥有的:
SELECT l.OFFICE_NAME, (us.LAST_NAME || ' , ' || us.FIRST_NAME) AS "Employee Name"
FROM LOCAL_OFFICE l, USERS us
WHERE l.LOCAL_OFFICE_ID = us.LOCAL_OFFICE_ID
ORDER BY l.OFFICE_NAME --what do I place here?--
我将通过 JOIN 而不是更昂贵的 FROM 来做到这一点,但是如何按名称的字母顺序排序?
【问题讨论】:
FROM 并不比 JOIN“贵”。 JOIN 现在只是首选,因为它更易于阅读,尤其是在大型 SQL 语句中。 @Tony Andrews 啊。我正在自学这个,并在某处读到 FROM 本质上是两张表的笛卡尔积,我知道这可能非常昂贵。 不,只有当您没有在 WHERE 子句中提供连接条件时,它才是笛卡尔积。 【参考方案1】:你可以说:
ORDER BY office_name, "Employee Name"
这适用于 11G,但可能不适用于旧版本的 Oracle。
【讨论】:
我试过这个,但我得到一个错误:[Error] Execution (11: 10): ORA-00904: "Employee Name": invalid identifier 哦,我在其他地方发现了导致它的错误。现在可以使用了,谢谢!【参考方案2】:你可以使用:
按 1,2 排序
这不是非常好的做法,但它确实有效。
【讨论】:
【参考方案3】:由于您的串联并没有真正添加任何新内容,为什么不只是
ORDER BY l.OFFICE_NAME, us.LAST_NAME, us.FIRST_NAME
编辑:如果USERS.LAST_NAME
和/或USERS.FIRST_NAME
上有索引,这将比通过串联结果排序更快
【讨论】:
这行得通,我不知道是否需要什么,因为我引用了 concat AS "Employee Name" 更喜欢这个。让索引变得有价值。【参考方案4】:ORDER BY l.OFFICE_NAME, (us.LAST_NAME || ' , ' || us.FIRST_NAME)
【讨论】:
以上是关于ORDER BY Oracle 中的串联名称?的主要内容,如果未能解决你的问题,请参考以下文章
oracle中在in子查询语句中order by排序能否用?
Oracle - SELECT DENSE_RANK OVER(ORDER BY、SUM、OVER 和 PARTITION BY)