插入数据时的排序问题?
我从一个表中插入数据到另一个表中
insert into a
select * from #b
a和#b的数据的顺序不一样?
问题点数:20、回复次数:12Top
1 楼brooks105(羔羊 )回复于 2005-12-09 15:37:53 得分 0
create table a (id int, name varchar(10))
insert a
select 1,'y'
create table b (name varchar(10),id int)
insert b
select 'x',2
insert into a
select id,name from b
select * from a
id name
----------- ----------
1 y
2 x
(所影响的行数为 2 行)
Top
2 楼lsqkeke(可可)回复于 2005-12-09 15:43:29 得分 0
是一样的! :)Top
3 楼xiepoor1(xiepoor1)回复于 2005-12-09 15:46:14 得分 0
当数据量很大时,比如有几万条。
插入的结果一样,但默认的排序是不一样的。
你们可以试一个数据量大的情况Top
4 楼lsqkeke(可可)回复于 2005-12-09 15:55:00 得分 0
字段前后的顺序不一样?
那得研究研究!
你刚碰到过?
Top
5 楼nononono(null,null)回复于 2005-12-09 16:02:19 得分 0
因为表记录的存储顺序(可以理解为select无order时的顺序)与插入顺序无关,你查询时用order by决定需要什么顺序。如果一定要存入的顺序,就增加一个自增列。Top
6 楼lsqkeke(可可)回复于 2005-12-09 16:07:03 得分 0
哦 我理解成字段在记录中的顺序了!
原来是单条记录的顺序哦! 现在知道原由了Top
7 楼xiepoor1(xiepoor1)回复于 2005-12-09 16:13:30 得分 0
是的,我的两个表中都有自增的id,
插入完后,目的表的结果,不是按id由大到小的顺序排的。Top
8 楼xiepoor1(xiepoor1)回复于 2005-12-09 16:15:47 得分 0
select * from a
a的结果中的id是由小到大的。
insert into b
select * from a
select * from b
b的结果中的id 不是 由小到大的。
Top
9 楼xiepoor1(xiepoor1)回复于 2005-12-09 16:39:01 得分 0
有自增列还是不行呀?
是不是应该这样呢?
insert into b
select * from a
order by idTop
10 楼nononono(null,null)回复于 2005-12-09 16:42:36 得分 12
如果a表有自增列就用order by,b表的自增列要自动生成,类似如下:
insert into b (fd2,fd3,fd4...) select fd2,fd3,fd4... from a order by fd1
Top
11 楼xiepoor1(xiepoor1)回复于 2005-12-09 16:54:49 得分 0
还是不明白:
我的结果中
select fd2,fd3,fd4... from a
跟
select fd2,fd3,fd4... from a order by fd1
查出的排序结果是一样的,
insert into b (fd2,fd3,fd4...) select fd2,fd3,fd4... from a
order by fd1
加不加order by fd1对于
select * from b 的结果确不一样。
这是为什么?
Top
12 楼kolosi(小丑巴其)回复于 2005-12-09 17:10:35 得分 8
SQL的表默认是无序的,查询的时候都是按照第一个字段排序,你表1和表2的结构不通,所以要想和表1排序一样的话,就要加order by
如果想要表里记录的顺序按你的要求的话,给表加个索引就行了。Top




