【问题标题】:join two tables into one big table将两张表连接成一张大表
【发布时间】:2008-11-29 09:04:22
【问题描述】:

我有两个具有相同列的表,我需要将一个表的行复制到另一个表的行,以创建一个包含两个表中所有值的大表。现在我正在执行此查询以返回相同的内容:

SELECT col1, col2, col3 from Table1
union
SELECT col1, col2, col3 from Table2

但是,它似乎非常低效,而且在我的系统上非常慢(返回 1210189 条记录)。

【问题讨论】:

    标签: sql database


    【解决方案1】:

    愿它起作用:

    SELECT col1, col2, col3 
    INTO Table1
    FROM Table2 
    

    【讨论】:

      【解决方案2】:

      从联合所有开始:

      select col1, col2, col3 from Table1
      union all
      select col1, col2, col3 from Table2
      

      您的查询正在尝试删除重复数据,这会大大降低查询速度。

      【讨论】:

      • 我很确定 deduplicate 是一个虚构的词 :-)
      • 我们在工作中一直使用“dedupe”(重复数据删除的缩写)这个词 :)
      • 重复数据删除是数据仓库和存储/备份情况下的标准短语。
      【解决方案3】:

      我认为最好的选择是在sql server中创建一个视图,这样可以优化查询的性能:

      SELECT col1, col2, col3 from Table1
      union all
      SELECT col1, col2, col3 from Table2
      

      (正如其他用户所说:“联合”用于从两个表中选择不同的值 其中“union all”用于选择所有值,包括 表中的重复项。)

      同时,如果我正在为 Web 编写它们并且这给我带来问题,我会限制从数据库获取的行数,使用 Sql Server 2005 row_number() 的新功能,我会分页结果。

      【讨论】:

        【解决方案4】:

        你可以用它来填充第二张桌子:

        Insert into table2 select * from table1;
        

        或者如果您想更具体:

        Insert into table2(col1, col2, col3) select col1, col2, col3 from table1;
        

        (注意:某些 DBMS 可能需要在 SELECT 子句周围加上括号。)

        【讨论】:

          【解决方案5】:
          select * into new table(your new table name) 
          from table1.col1,table1.col2,table2.col1;
          

          这里的列可以是您需要的列。

          【讨论】:

            【解决方案6】:
            select * into newtable from table1
            union all
            select * from table2
            

            运作良好。准则,两个表具有完全相同的列名:)

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2023-03-31
              • 2014-05-20
              • 2012-12-11
              • 1970-01-01
              • 2016-08-29
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多