use*_*336 -2 sql oracle oracle11g
现在我有一个非常简单的SQL:select*from table A.
我知道结果将按"rowid"排序(我不太确定,我是新生).如果没有"order by",Oracle将无法保证SQL结果的顺序.
这是我的问题:
一旦我得到了这样的结果:...... A ...... B ....
现在我想按照这个顺序得到结果:...... B ...... A ....
在A没问题之前做B.这该怎么做?
注意1:这是一个实验.请耐心思考我的问题.
注意2:不要更改任何记录的主键,也不要使用任何DDL,并使用相同的SQL"select*from table A".
通知3:
create table A(id NUMBER(20) primary key, name VARCHAR2(30));
insert into A values(1,'one');
insert into A values(2,'two');
select * from A;
Run Code Online (Sandbox Code Playgroud)
我尝试过:更新,插入,删除一些无效的记录.
编辑
鉴于此要求:
不要更改SQL
select * from table A
.
更改表A以更改结果顺序
答案是明确的:这是没有可能的.
(保留我的初步答案作为参考)
" 我知道结果将按rowid
" 排序 " - 不,他们不是.
行将以数据库认为最有效的任何顺序返回.
除非您指定了行,否则绝对不会保证以任何特定顺序返回行ORDER BY
.
获取特定订单的唯一方法是使用ORDER BY
.
如果你想'B'
在之前来,'A'
那么只需按降序排列:
select *
from table_A
order by some_col DESC
Run Code Online (Sandbox Code Playgroud)
您可以ORDER BY
通过应用表达式或函数将更多逻辑放入运算符中.如果您想要'B'
按字母顺序排在顶部以及之后的其他所有内容,您可以执行以下操作:
select *
from table_a
order by
case
when some_col = 'B' then 0
else 1
end,
some_col
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1019 次 |
最近记录: |