2016-03-10 34 views
0

我正嘗試使用來自同一個數據庫的2個不同的表在SQL中創建一個新表。我嘗試使用Union All,但它給了我一個錯誤,因爲需要有相同數量的工會列。沒有Union ALL有沒有辦法做到這一點?有人可以告訴我正確的方式來做到這一點。預先感謝您的任何幫助。在SQL中使用2個不同的表插入值

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]

相關問題