2013-03-04 2 views
3

У меня есть 3 таблицы в SQL, и мне нужно, чтобы они были объединены в 1. Мне нужны все поля из всех таблиц в таблице 1. Все таблицы содержат одни и те же поля только с трех разных лет. Я написал код, которыйСоздание 1 Таблица из 3 разных таблиц

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 книгу и не могу найти объяснение о методе для этого, любая помощь будет принята с большой благодарностью.

+0

возможно дубликат [Как создать таблицу с помощью запроса на выборку в SQL Server?] (HTTP: //stackoverflow.com/questions/11114441/how-to-create-table-using-select-query-in-sql-server) или [попытаться создать таблицу из Select - SqL Server 2008 выдает ошибку] ​​(http://stackoverflow.com/questions/11940477/try-to-create-a-table-from-select-sql-server-2008-throws-error) – LittleBobbyTables

ответ

4

Вам нужно два сделать два шага:

  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

+0

Я добавил во все столбцы и нули, которые мне нужны, и я получаю синтаксическую ошибку около ')' Я удалил «n» тоже, потому что понял, что это была опечатка – user2119980

+0

Нуль N необходимо там, это имя внутреннего Таблица. В этом причина вашей синтаксической ошибки. Попробуйте демонстрацию SQL FIDDLE, если вы удалите «n», вы получите ту же ошибку. –

+0

Таблицы содержат более 20 000 000 строк.Я удалил один, объединил другие 2, удалил один из них, а затем прочитал первую удаленную таблицу, и теперь я пытаюсь объединить данные из двух таблиц. Я не могу создать новую таблицу из-за того, что не хватает места для размещения данных, поэтому мне нужно просто объединить 2 таблицы для формирования 1 таблицы, чтобы в итоге она содержала данные из всех трех таблиц. Есть идеи? – user2119980

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 
+0

Я уверен, что «CRE ATE TABLE AS SELECT "не является синтаксисом SQL Server вообще, если они не изменили что-то в 2012 году, которое я пропустил. – LittleBobbyTables

+0

Я получаю ошибку Все запросы, объединенные с помощью оператора UNION, INTERSECT или EXCEPT, должны иметь равное количество выражений в своих целевых списках. Я забыл упомянуть о таблицах, отсутствует один столбец, в двух других таблицах есть – user2119980

+0

@LittleBobbyTables: Мой запрос не включает 'CREATE TABLE AS SELECT'. –

1

Ваш синтаксис является по существу правильным, если предположить, что ваш подзапрос возвращает результат. Две вещи, которые вы могли бы попробовать:

  1. Запустите инструкцию SELECT самостоятельно, чтобы убедиться в ее правильности.
  2. Поместите пробел между AS и скобкой.

В соответствии с this page скобки необходимы.

Смежные вопросы