SQL Server插入左联接

SQL Server插入左联接,sql,sql-server,Sql,Sql Server,我有两张桌子: TABLE1 TABLE2 COLUMN1 COLUMN2 COLUMN1 COLUMN2 --------------- --------------- John 56 45 A Bob 45 45 B Eva 68

我有两张桌子:

    TABLE1                        TABLE2

COLUMN1 COLUMN2               COLUMN1 COLUMN2
---------------               ---------------
John      56                     45      A
Bob       45                     45      B 
Eva       68                     68      C
Alex      56                     47      D
Android   48                     45      L 
Mum       68                     68      C
…         …                      56      Q
                                  …     ...
我需要将列添加到一个表中,事实上我将使用函数join从另一个表中插入新的列值

COLUMN1 COLUMN2 COLUMN3
-----------------------
John      56      Q 
Bob       45      B 
Bob       45      A
Bob       45      L
Alex      56      Q
Eva       68      C
Android   48      NULL         
Mum       68      C
…         …        …     


ALTER TABLE [dbo].[Table1]
ADD Column3 NVARCHAR(255); 

INSERT INTO [dbo].[Table1] (column3)
    SELECT table2.column2
    FROM [dbo].[Table2] 
    LEFT JOIN [dbo].[table1] ON table1.column2 = table2.column1
但是我越来越

COLUMN1 COLUMN2 COLUMN3
------------------------
John     56       
Bob      45       
Eva      68       
NULL     NULL     A
NULL     NULL     D
NULL     NULL     C
…         …       …

你能帮我修复我的插页吗?

在我看来,你需要的是更新,而不是插页。。。请尝试以下方法:

UPDATE t1 
SET column3 = t2.column2 
FROM dbo.Table2 t2
LEFT JOIN dbo.Table1 t1 ON t1.column2 = t2.column1

在我看来,你需要的是更新,而不是插入。。。请尝试以下方法:

UPDATE t1 
SET column3 = t2.column2 
FROM dbo.Table2 t2
LEFT JOIN dbo.Table1 t1 ON t1.column2 = t2.column1

我看不出左连接与此有什么关系:

UPDATE t1
    SET column3 = t2.column2
    FROM [dbo].[Table1] t1 JOIN
         [dbo].[Table2] t2
         ON t1.column2 = t2.column1;
表2中未找到的值将设置为
NULL

编辑:

等一下。您正在向列中插入行和值。您似乎想要完成此查询:

SELECT t1.column1, t1.column2, t2.column3
FROM [dbo].[Table1] t1 LEFT JOIN
     [dbo].[Table2] t2
     ON t1.column2 = t2.column1;
我的建议是将其放入新表中,而不是
表1

SELECT t1.column1, t1.column2, t2.column3
INTO [dbo].[Table3]
FROM [dbo].[Table1] t1 LEFT JOIN
     [dbo].[Table2] t2
     ON t1.column2 = t2.column1;
如果确实要替换
表1
中的数据,请使用中间表:

SELECT t1.column1, t1.column2, t2.column3
INTO #temp
FROM [dbo].[Table1] t1 LEFT JOIN
     [dbo].[Table2] t2
     ON t1.column2 = t2.column1;

TRUNCATE TABLE dbo.Table1;

INSERT INTO dbo.Table1 (column1, column2, column3)
    SELECT column1, column2, column3
    FROM #temp;

我看不出左连接与此有什么关系:

UPDATE t1
    SET column3 = t2.column2
    FROM [dbo].[Table1] t1 JOIN
         [dbo].[Table2] t2
         ON t1.column2 = t2.column1;
表2中未找到的值将设置为
NULL

编辑:

等一下。您正在向列中插入行和值。您似乎想要完成此查询:

SELECT t1.column1, t1.column2, t2.column3
FROM [dbo].[Table1] t1 LEFT JOIN
     [dbo].[Table2] t2
     ON t1.column2 = t2.column1;
我的建议是将其放入新表中,而不是
表1

SELECT t1.column1, t1.column2, t2.column3
INTO [dbo].[Table3]
FROM [dbo].[Table1] t1 LEFT JOIN
     [dbo].[Table2] t2
     ON t1.column2 = t2.column1;
如果确实要替换
表1
中的数据,请使用中间表:

SELECT t1.column1, t1.column2, t2.column3
INTO #temp
FROM [dbo].[Table1] t1 LEFT JOIN
     [dbo].[Table2] t2
     ON t1.column2 = t2.column1;

TRUNCATE TABLE dbo.Table1;

INSERT INTO dbo.Table1 (column1, column2, column3)
    SELECT column1, column2, column3
    FROM #temp;


John column2为56,而John column2为56,而John column 2为Q!的原因可能重复!在我看来,你需要的是更新,而不是插入…@ZoharPeled他需要插入,因为你会看到他在源表中重复“Bob”(因为第2列在另一个表中重复。John Column2是56,而John Column2是56,而John Column2是56,而John column是第2列的原因可能重复。在我看来,您需要的是更新,而不是插入…@ZoharPeled他需要插入,因为您会看到他在源表中重复“Bob”(因为第2列在另一个表中重复。我认为您的查询中应该有右连接,或者应该更改表的顺序。@AnkitBajpai我从问题中的代码中获取了连接。不过,也许您是正确的。@Luka-尝试将左连接更改为右连接。如果您的问题包含DDL+DML的示例数据,我可能会在发布我的答案之前,请先阅读我的答案…我认为您的查询中应该有右连接,或者应该更改表的顺序。@AnkitBajpai我从问题中的代码中获取了连接。不过,也许您是正确的。@Luka-尝试将左连接更改为右连接。如果您的问题包含DDL+DML的示例数据,我可以测试我的answer在发布之前…我认为最新的查询是最好的,忘记直接动态更改第一个表,当同一个键有多个值时,这样做肯定会有问题。@GordonLinoff,中间表在这种特定情况下会有什么显著影响?@AnkitBajpai…我不知道在你提问时,除了说临时表存储了结果集。但是如果你有问题,也许你应该把它作为一个问题来提问。我不认为我应该单独提问,因为这只是关于你的特定答案。我想问的是临时表在这里会有一些显著的影响吗?为什么我会只是启动一个更新查询并提取所需的数据?我同意更新不会添加新行,我只关心为什么我们需要使用临时表。为什么我只能使用select…into…from子句。我认为最新的查询是最好的,忘记直接动态更改第一个表,这样做肯定会有问题因此,当同一个键有多个值时。@GordonLinoff,中间表在这种特定情况下会有什么重大影响?@AnkitBajpai…我不知道你在问什么,只是说临时表存储了结果集。但是如果你有问题,也许你应该作为问题来问。我不知道我想我应该单独问这个问题,因为这只是关于你的特定答案。我想问的是临时表在这里会有一些显著的影响吗?为什么我可以启动一个更新查询并提取所需的数据?我同意更新不会添加新行,我只关心为什么我们需要使用临时选项卡为什么我只能使用select…into…from子句。