我正在尝试加入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
答案 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中有另一列确定排序,否则您将无法实现此目的。通常,它是另一个主键/大整数列,它保存插入值的顺序。