13

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

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

我有两张桌子:myTable1myTable2。两者共享一个领域MyID,这将是我加入的领域。myTable1包含一个名为 的列BitToUpdate。MyTable2 包含一个名为BitToCheck.

我想设置BitToUpdatemyTable11,其中BitToCheckinmyTable2也是 1。

这是我所拥有的:

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

所以首先我尝试加入这两个表myTable1myTable2它们的 ID,并将结果存储在一个临时表中。

接下来,我想更新BitToUpdate为 1,其中BitToCheck1。

所以要在临时表中做到这一点,我有:

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

这将BitToUpdate成功更新#temp_table。但是,当我对 进行选择时myTable1,我发现它BitToUpdate没有改变。我想这是有道理的,因为 #temp_table 并不是真正的“指针”......

但是,处理这种加入和更新的正确方法是什么?

4

4 回答 4

34

您不需要在LEFT JOIN此处使用 a,因为您正在检查表 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
于 2013-03-18T16:17:57.147 回答
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
于 2013-03-18T16:14:11.743 回答
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
于 2013-03-18T16:15:22.077 回答
0
UPDATE T1
SET BitToUpdate=1
FROM myTable1 T1
LEFT JOIN myTable2 T2
ON T1.MyId=T2.MyId
WHERE T2.BitToCheck=1
于 2013-03-18T16:16:40.470 回答