2016-03-10 6 views
0

Я пытаюсь создать новую таблицу в SQL, используя две разные таблицы из одной базы данных. Я попытался использовать Union All, но он дал мне ошибку, так как для объединения должно быть равное количество столбцов. Есть ли способ сделать это без союза ВСЕ? Может кто-то, пожалуйста, покажет мне правильный способ сделать это. Спасибо заранее за любую помощь.Вставить значения с использованием двух разных таблиц в SQL

INSERT [Data].[dbo].[Name] (Id, PlateId,RecommendationId,PositionId, Min, Max) 

SELECT id 
, pid 
, tid 
, min 
, max 
FROM [Users].[dbo].[Settings] 
UNION ALL 
SELECT tid 
FROM [Users].[dbo].[Tips] 
+0

Что вы ожидаете от вставок для отсутствующих столбцов во второй части союза? Кроме того, я рекомендую изменить имена, ну, все в ваших таблицах. Вы поблагодарите меня через 18 месяцев, когда вам нужно немного потрудиться, чтобы понять, что такое «pid» и как оно отличается от «tid». –

+0

Есть ли FK на втором столе? – Kramb

+0

[Надеюсь, это поможет вам, проверьте информацию по ссылке] (http://stackoverflow.com/questions/20404682/sql-insert-into-from-multiple-tables) –

ответ

0

Если у вас нет одинакового количества столбцов в обеих таблицах, вы можете выбрать литерал в качестве заполнителя для каждого отсутствующего столбца.

INSERT [Data].[dbo].[Name] (Id, PlateId,RecommendationId,PositionId, Min, Max) 

SELECT id 
, pid 
, tid 
, min 
, max 
FROM [Users].[dbo].[Settings] 
UNION ALL 
SELECT 'a' AS id 
, 'x' AS pid 
, tid 
, 0 AS min 
, 0 AS max 
FROM [Users].[dbo].[Tips] 

Независимо от того, что вы используете для своих значений, должно быть одинаковое количество столбцов для обоих вариантов в объединении.

0

Вместо UNIONing всех столбцов из обеих таблиц, получить конкретный список всех столбцов вы хотите включить:

INSERT [Data].[dbo].[Name] (Id, PlateId, RecommendationId, PositionId, Min, Max) 
    SELECT 
     id, pid, tid, min, max 
    FROM 
     [Users].[dbo].[Settings] 
    UNION ALL 
    SELECT 
     id, pid, tid, min, max 
    FROM 
     [Users].[dbo].[Tips] 

Если один из столбцов, которые вы хотите включить появляется только в одной таблице, может использовать значение NULL или статическое значение для этого столбца в этой таблице (например) ,NULL AS [pid] или ,'' as [pid].