在SQL中使用2个不同的表插入值

时间:2016-03-10 15:53:40

标签: mysql sql sql-server mysql-management

我正在尝试使用来自同一数据库的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]

2 个答案:

答案 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>