我是SQL新手,使用的是Microsoft SQL Server Management Studio。
我正在尝试编写一个SQL语句,在连接两个表后执行更新。
我有两个表:myTable1
和myTable2
。两者共享一个字段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上加入两个表myTable1
和myTable2
,并将结果存储在临时表中。
接下来,我想将BitToUpdate
更新为1 BitToCheck
为1。
所以要在临时表中这样做,我有:
UPDATE #temp_table
SET
`BitToUpdate` = 1
WHERE
`BitToCheck` = 1
这会在#temp_table中成功更新BitToUpdate
。但是,当我对myTable1
进行选择时,我发现BitToUpdate
未被更改。我认为这是有道理的,因为#temp_table并不是真正的“指针”....
但是接近此更新和更新的正确方法是什么?
答案 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
的临时表。更新永远不会转到实际的表myTable1
或mayTable2
。要在与其他表连接时更新记录,请尝试以下操作:
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