【发布时间】:2019-07-06 03:28:07
【问题描述】:
我有一个表student,我想对其中的三列进行排序:first_name, last_name, street_address。我期待这样的结果:
| first_name | last_name | street_address |
A A 100 Carroll St
B B 200 Carroll St
C C 300 Carroll St
这是我的 SQL 查询:
SELECT first_name, last_name, street_address
FROM student
ORDER BY first_name, last_name, street_address;
但是这个查询是这样排序的:
| first_name | last_name | street_address |
A C (not sorted) 300 Carroll St (not sorted)
B B (not sorted) 100 Carroll St (not sorted)
C A (not sorted) 200 Carroll St (not sorted)
此查询无法正常工作。它不会按升序对所有列进行排序,它只对出现在 ORDER BY 之后的第一列进行排序。如上所述,查询只对first_name 列进行排序。如果我在 ORDER BY 之后更改列的位置,它只会在“ORDER_BY”之后对第一个提到的列进行排序。
我搜索了 Google 和许多论坛,但找不到与此问题相关的任何内容。
Oracle 版本:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production 0
PL/SQL 版本 12.2.0.1.0 - 生产 0
核心 12.2.0.1.0 生产 0
适用于 64 位 Windows 的 TNS:版本 12.2.0.1.0 - 生产 0
NLSRTL 版本 12.2.0.1.0 - 生产 0
感谢您的帮助。
【问题讨论】:
-
order by就是这样工作的。键是按顺序使用的,并且仅用于打破前面键中的关系。 -
完全符合预期。首先按 first_name 排序。在重复的情况下按姓氏排序。等等。
-
这些不是独立的值;列属于行,因此您不能将名字与姓氏与街道地址分开排序。嗯,你可以,但问题是这样的数据代表什么。
-
这就是 order by 的工作方式......
-
@APC 啊,是的,好点,重新阅读问题,我将删除该评论
标签: sql oracle oracle11g oracle12c