加入两个表后的SQL更新

时间:2013-03-18 16:10:32

标签: sql-server

我是SQL新手,使用的是Microsoft SQL Server Management Studio。

我正在尝试编写一个SQL语句,在连接两个表后执行更新。

我有两个表:myTable1myTable2。两者共享一个字段MyID,它将成为我加入的字段。 myTable1包含一个名为BitToUpdate的列。 MyTable2包含一个名为BitToCheck的列。

我想将BitToUpdate中的myTable1设为1,BitToCheck中的myTable2也是1。

这就是我所拥有的:

SELECT M.MyID, BitToUpdate, BitToCheck
INTO #temp_table
FROM myTable1 as T1
LEFT JOIN myTable2 as T2
ON M.MyId = PO.MyId

首先,我尝试在其ID上加入两个表myTable1myTable2,并将结果存储在临时表中。

接下来,我想将BitToUpdate更新为1 BitToCheck为1。

所以要在临时表中这样做,我有:

UPDATE #temp_table
SET 
    `BitToUpdate` = 1
WHERE
    `BitToCheck` = 1

这会在#temp_table中成功更新BitToUpdate。但是,当我对myTable1进行选择时,我发现BitToUpdate未被更改。我认为这是有道理的,因为#temp_table并不是真正的“指针”....

但是接近此更新和更新的正确方法是什么?

4 个答案:

答案 0 :(得分:22)

您不需要在此使用LEFT JOIN,因为您正在检查表2中的条件,因此INNER JOIN应该更好。

UPDATE T1
SET T1.BitToUpdate = 1
FROM myTable1 T1
INNER JOIN myTable2 T2
    ON T1.MyId = T2.MyId
WHERE T2.BitToCheck = 1

答案 1 :(得分:4)

您在第一个查询中正在执行的操作是更新名为#temp的临时表。更新永远不会转到实际的表myTable1mayTable2。要在与其他表连接时更新记录,请尝试以下操作:

UPDATE T1
SET T1.BitToUpdate = 1
FROM myTable1 as T1
LEFT JOIN myTable2 as T2 (ON T1.MyId = T2.MyId)
WHERE T2.BitToCheck = 1

答案 2 :(得分:1)

--SELECT M.MyID, BitToUpdate, BitToCheck
--INTO #temp_table
update t1
  set t1.BitToUpdate = 1
FROM myTable1 as T1
LEFT JOIN myTable2 as T2
ON t1.MyId = t2.MyId
where t2.bittocheck = 1

答案 3 :(得分:0)

UPDATE T1
SET BitToUpdate=1
FROM myTable1 T1
LEFT JOIN myTable2 T2
ON T1.MyId=T2.MyId
WHERE T2.BitToCheck=1