加入2个表时数据正在排序

时间:2015-11-21 09:55:54

标签: sql oracle

我正在尝试加入2个表格,例如:

表1

Col1
---
3
4
2
1

表2

Col1    Col2
----    ----
1   A
2   B
3   C
4   D

当我加入时:

select T2.Col2 from Table2 T2,Table1.T1 where T1.Col1=T2.Col1;

输出:

A
B
C
D

但我想:

C
D
B
A

3 个答案:

答案 0 :(得分:2)

如果您希望对查询结果进行排序,则始终需要ORDER BY

关系数据库和sql的基本概念是一个集合,而一个集合没有顺序。在没有order by子句的情况下查询时遇到的任何推定的顺序都是任意的 - 这意味着它们在同一查询的多次调用中不会很稳定。

从您的示例中不清楚排序标准是什么,让我们假设有一个列Table2.Col3包含数据全局排序中的排名。然后您可以通过以下方式获得所需的结果:

  select T2.Col2 
    from Table2 T2
    JOIN Table1 T1 ON ( T1.Col1 = T2.Col1 )
ORDER BY T2.Col3
       ;

This Sqlfiddle演示了完整的示例。

NB: 我已将您的示例查询调整为标准连接语法。

答案 1 :(得分:0)

执行此操作order by唯一的方法是添加一个额外的列,为table1中的数据指定order by。数据库无法保证物理表的数据顺序,您需要order by按特定顺序返回它们

select T2.Col2 
  from Table2 T2,Table1 T1 
    where T1.Col1=T2.Col1
    order by t1.order_column  

    COL2
1   C
2   D
3   B
4   A

create table table1 (col1 int, order_column int);
create table table2 (col1 int, col2 varchar2(10));

insert into table1 values(3,1);
insert into table1 values(4,2);
insert into table1 values(2,3);
insert into table1 values(1,4);

insert into table2 values(1,'A');
insert into table2 values(2,'B');
insert into table2 values(3,'C');
insert into table2 values(4,'D');

答案 2 :(得分:0)

除非Table1中有另一列确定排序,否则您将无法实现此目的。通常,它是另一个主键/大整数列,它保存插入值的顺序。