2013-03-18 2 views
8

Я новичок в SQL, используя Microsoft SQL Server Management Studio.Обновление SQL после соединения двух таблиц

Я пытаюсь написать инструкцию 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 

Так первый я попытался объединить эти две таблицы myTable1 и myTable2 на их идентификаторах, и сохранить результат во временной таблице.

Далее, я хочу, чтобы обновить BitToUpdate быть 1, где BitToCheck равен 1.

Итак, чтобы сделать это во временной таблице, у меня есть:

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

Это обновляет BitToUpdate успешно #temp_table , Однако, когда я делаю выбор на myTable1, я обнаружил, что BitToUpdate не изменен. Я предполагаю, что это имеет смысл, поскольку #temp_table не является «указателем» ....

Но каков был бы правильный подход к этому соединению и обновлению?

ответ

13

Вам не нужно использовать 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 
+0

Это неправильно, пожалуйста, обратитесь к этому http://stackoverflow.com/questions/15209414/how-to-use-join-in-update-query Порядок : Update -> JOIN -> SET – Hendyanto

+0

В случае, если кто-то заботится: запрос выше не ошибочен. В MS SQL вы можете либо UPDATE -> JOIN -> SET, либо UPDATE -> SET -> FROM -> JOIN ... или даже UPDATE -> SET -> FROM -> WHERE .. , –

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 
+0

+1 для объяснения – Lamak

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 
0
UPDATE T1 
SET BitToUpdate=1 
FROM myTable1 T1 
LEFT JOIN myTable2 T2 
ON T1.MyId=T2.MyId 
WHERE T2.BitToCheck=1 
Смежные вопросы