7

我在 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 书籍,似乎无法找到有关执行此操作的方法的解释,任何帮助将不胜感激。

4

3 回答 3

9

你需要两个做两步:

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

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

所以它应该看起来像:

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

于 2013-03-04T15:12:23.643 回答
1

你需要联合所有:

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
于 2013-03-04T14:41:45.930 回答
1

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

  1. 单独运行 SELECT 语句以确保它是正确的。
  2. 在 AS 和括号之间放置一个空格。

根据this page,括号是必需的。

于 2013-03-04T14:49:21.317 回答