2014-01-06 5 views
0

Я смущен утверждением Update, которое кажется легким на поверхности. Мне нужно обновить значения в 4 столбцах в Таблице 1 со значениями из Таблицы 2 на основе сопоставления двух отдельных столбцов из каждой таблицы. Вот общий синтаксис:Оператор обновления SQL обновляется

Update Table1 
set field1 = [table2 field1] 
, field2 = [table2 field2] 
, field3 = [table2 field3] 
, field4 = [table2 field4] 
--select * 
from Table2 p inner join Table1 c 
on p.matchfield1 = c.matchfield1 and p.matchfield2 = c.matchfield2 
where c.database_id = 1 --qualifier since join clause may not provide unique result set 
and p.matchfield1 = 123456 --to test the statement on a single record first 

Когда я запускаю предложение как оператор выбора, я получаю одну запись, как ожидалось. Тем не менее, когда я запускаю предложение update с использованием того же языка «от», я обнаружил, что запрос обновляет КАЖДУЮ строку в таблице 1 со значениями из таблицы 2, где matchfield1 = 123456.

Мне интересно, нужно ли мне уточнить мои where, чтобы получить квалификацию, основанную на значении matchfield2 (адрес eamil в моем примере), поэтому я добавлю в конец выражения 'и p.matchfield2 =' [email protected] ''.

Я подозреваю, что я очень мало настраиваю эту работу, но тем временем это делает меня сумасшедшим. Спасибо за любой совет!

+1

В чем вы работаете? –

+0

Я использую SQL Server 2008. Извините, я не добавил это к первому сообщению. – user3167010

ответ

0

Вместо того, чтобы делать JOIN на том же столе, попробуйте это (если вы используете SQL Server) ...

UPDATE Table1 
    set field1 = [table2 field1] 
    , field2 = [table2 field2] 
    , field3 = [table2 field3] 
    , field4 = [table2 field4] 
FROM Table2 p   
WHERE database_id = 1 
    AND p.matchfield1 = 123456 
    AND p.matchfield1 = matchfield1 AND p.matchfield2 = matchfield2 

Вы также можете изменить ваш запрос, чтобы затянуть фильтрацию, добавив AND c.matchfield1 = matchfield1 AND c.matchfield2 = matchfield2 в WHERE пункт.

+0

Спасибо за отзыв. Это было очень полезно. Я предполагал, что мне нужно было установить соединение между таблицей 1 и таблицей2, прежде чем я смог добавить database_id = 1 в предложение where. Я смог заставить это работать! Еще раз спасибо! – user3167010

+0

@ user3167010 Таблица, которую вы пытаетесь обновить, работает как таблица1, поэтому 'FROM' может просто иметь другие таблицы. – user2989408

Смежные вопросы