从三个不同的表创建一个表

时间:2013-03-04 14:38:52

标签: sql-server create-table

我在SQL中有三个表,我需要将它们合并为一个。我需要一个表中所有表中的所有字段。所有表格包含三个不同年份的相同字段。我写了一个代码:

CREATE TABLE COL_TBL_TRAINING_ALL_YEARS AS(
SELECT 
COL_TBL_2010_TRN_RESULTS_new.*,
COL_TBL_TRN_RESULTS_GEMS_2011.*, 
COL_TBL_TRN_RESULTS_GEMS_2012.*
FROM COL_TBL_2010_TRN_RESULTS_new,
COL_TBL_TRN_RESULTS_GEMS_2011, 
COL_TBL_TRN_RESULTS_GEMS_2012
WHERE COL_TBL_2010_TRN_RESULTS_new.SYS_EMP_ID_NR = COL_TBL_TRN_RESULTS_GEMS_2011.SYS_EMP_ID_NR = COL_TBL_TRN_RESULTS_GEMS_2012.SYS_EMP_ID_NR)

我在'AS'错误附近找到了错误的语法,并且'='

附近的语法不正确

我已经阅读了我的SQL书籍,似乎无法找到解决方法,我们将非常感谢任何帮助。

3 个答案:

答案 0 :(得分:7)

你需要做两步:

  1. 使用UNION ALL,就像提到的那样。但如果缺少某列,则应对该列使用NULL

  2. 您应该将结果插入新表格中。

  3. 所以看起来应该是这样的:

    SELECT * 
    INTO   yournewtablename 
    FROM   (SELECT col1, 
                   col2, 
                   col3 
            FROM   col_tbl_2010_trn_results_new 
            UNION ALL 
            SELECT col1, 
                   col2, 
                   col3 
            FROM   col_tbl_trn_results_gems_2011 
            UNION ALL 
            SELECT col1, 
                   col2, 
                   NULL AS Col3 
            FROM   col_tbl_trn_results_gems_2012) n 
    

    以下是展示的示例:SQL FIDDLE

答案 1 :(得分:1)

你需要UNION ALL:

SELECT * FROM COL_TBL_2010_TRN_RESULTS_new UNION ALL
SELECT * FROM COL_TBL_TRN_RESULTS_GEMS_2011 UNION ALL 
SELECT * FROM COL_TBL_TRN_RESULTS_GEMS_2012

答案 2 :(得分:1)

假设您的子查询返回结果,您的语法基本上是正确的。您可能想尝试两件事:

  1. 单独运行SELECT语句以确保它是正确的。
  2. 在AS和括号之间加一个空格。
  3. 根据this page,括号是必需的。