我正在尝试使用来自同一数据库的2个不同的表在SQL中创建一个新表。我尝试使用Union All,但它给了我一个错误,因为需要有相同数量的联合列。没有Union ALL,有没有办法做到这一点?有人可以告诉我正确的方法。预先感谢您的任何帮助。
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 :(得分: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]
无论您使用什么值,都需要为联合中的两个选项提供相同数量的列。
答案 1 :(得分: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 AS [pid]
或,'' as [pid]
上使用该列的NULL或静态值。 / p>