我有两个表,average_table
和position_table
。它们各有两列。我想将排序后的数据从average_table
复制到position_table
,如下所示
average_table
看起来像这样
std_id avr
001 23.4
002 34.7
003 13.9
004 56.8
然后position_table
应如下所示:
std_id avr
004 56.8
002 34.7
001 23.4
003 13.9
当我使用以下sql查询时,average_table
和position_table
之间的结果没有区别。有人可以帮帮我吗?
try {
String str = "insert into POSITION_TABLE select * from AVERAGE_TABLE ORDER BY avr DESC";
rs = st.executeQuery(str);
}
catch(SQLException ce){System.out.print(ce)}
答案 0 :(得分:2)
在SQL世界中,行并未真正排序。可能有一种方法可以在MySQL中执行此操作(在SQL服务器中,我认为群集可能会这样做 - 但出于另一个原因,而不是按顺序获取行)。
换句话说,插入的行不保证具有特定的顺序。由于SQL是声明性的,因此您必须在查询时声明如何对其进行排序。
我不明白你要用position
表来实现什么 - 对我而言,它看起来像是average
表的完全重复,你得到排序的数据已使用您的查询使用订单。只需在需要订购数据时使用订单。
答案 1 :(得分:1)
create table average_table
( std_id int not null,
avr decimal(8,2) not null
);
insert average_table (std_id,avr) values (1,23.4),(2,34.7),(3,13.9),(4,56.8);
create table position_table
( id int auto_increment primary key,
std_id int not null,
avr decimal(8,2) not null
);
insert into position_table(std_id,avr) select std_id,avr from average_table order by avr desc;
select * from position_table;
+----+--------+-------+
| id | std_id | avr |
+----+--------+-------+
| 1 | 4 | 56.80 |
| 2 | 2 | 34.70 |
| 3 | 1 | 23.40 |
| 4 | 3 | 13.90 |
+----+--------+-------+