13

Microsoft SQL Server Management Studio を使用して、SQL を初めて使用します。

2 つのテーブルが結合された後に更新を実行する SQL ステートメントを作成しようとしています。

と の 2 つのテーブルがmyTable1ありmyTable2ます。どちらもフィールドを共有しておりMyID、これが私が参加するフィールドになります。myTable1という列が含まれていますBitToUpdate。MyTable2 には という列が含まれていますBitToCheck

inも 1 である 1に設定BitToUpdateしたいと思います。myTable1BitToCheckmyTable2

ここに私が持っているものがあります:

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

最初に、2 つのテーブルmyTable1myTable2その ID を結合して、結果を一時テーブルに格納しようとしました。

BitToUpdate次に、1になるように更新したいと思いBitToCheckます。

したがって、一時テーブルでそれを行うには、次のようにします。

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

これによりBitToUpdate、#temp_table が正常に更新されます。ただし、 select を実行すると、変更されていないmyTable1ことがわかりますBitToUpdate。#temp_table は実際には「ポインタ」ではないので、これは理にかなっていると思います....

しかし、この結合と更新にアプローチする正しい方法は何でしょうか?

4

4 に答える 4

34

ここでa を使用する必要はありません。LEFT JOIN表 2 の条件をチェックしているので、ここでは anINNER 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です。更新が実際のテーブル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
于 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 に答える