【发布时间】:2008-11-29 09:04:22
【问题描述】:
我有两个具有相同列的表,我需要将一个表的行复制到另一个表的行,以创建一个包含两个表中所有值的大表。现在我正在执行此查询以返回相同的内容:
SELECT col1, col2, col3 from Table1
union
SELECT col1, col2, col3 from Table2
但是,它似乎非常低效,而且在我的系统上非常慢(返回 1210189 条记录)。
【问题讨论】:
我有两个具有相同列的表,我需要将一个表的行复制到另一个表的行,以创建一个包含两个表中所有值的大表。现在我正在执行此查询以返回相同的内容:
SELECT col1, col2, col3 from Table1
union
SELECT col1, col2, col3 from Table2
但是,它似乎非常低效,而且在我的系统上非常慢(返回 1210189 条记录)。
【问题讨论】:
愿它起作用:
SELECT col1, col2, col3
INTO Table1
FROM Table2
【讨论】:
从联合所有开始:
select col1, col2, col3 from Table1
union all
select col1, col2, col3 from Table2
您的查询正在尝试删除重复数据,这会大大降低查询速度。
【讨论】:
我认为最好的选择是在sql server中创建一个视图,这样可以优化查询的性能:
SELECT col1, col2, col3 from Table1
union all
SELECT col1, col2, col3 from Table2
(正如其他用户所说:“联合”用于从两个表中选择不同的值 其中“union all”用于选择所有值,包括 表中的重复项。)
同时,如果我正在为 Web 编写它们并且这给我带来问题,我会限制从数据库获取的行数,使用 Sql Server 2005 row_number() 的新功能,我会分页结果。
【讨论】:
你可以用它来填充第二张桌子:
Insert into table2 select * from table1;
或者如果您想更具体:
Insert into table2(col1, col2, col3) select col1, col2, col3 from table1;
(注意:某些 DBMS 可能需要在 SELECT 子句周围加上括号。)
【讨论】:
select * into new table(your new table name)
from table1.col1,table1.col2,table2.col1;
这里的列可以是您需要的列。
【讨论】:
select * into newtable from table1
union all
select * from table2
运作良好。准则,两个表具有完全相同的列名:)
【讨论】: