2015-06-18 7 views
0
Select * from a 
inner join b 
on a.1=b.2 

update table a 
set a.2=b.3 
from a 
inner join b 
on a.1=b.2 

Я пытаюсь обновить столбец в таблице в SQL.SQL COLUMN Update

Первоначально я выбираю данные из столбца, используя соединение, строки которого необходимо обновить (количество будет 40000). Затем я запускаю инструкцию обновления, чтобы обновить столбец новыми значениями (обновленный счетчик 2000). Счетчик от объединения всегда больше, чем количество обновлений.

Когда я возвращаюсь и выполняю соединение, я получаю счет как ноль.

Я не мог понять, почему я получаю разницу. Может ли кто-нибудь помочь?

Благодаря

+2

Потому что в таблице Б несколько строк, которые соответствуют некоторым строкам в таблице. –

+1

И в качестве бонуса, что с 'FROM' является нестандартным расширением для SQL, это даже не гарантировано *, которые * строки из' B' использовались для предоставления конечных значений, которые использовались в 'A'. –

ответ

0

Как уже упоминалось в комментарии, проблема заключается в том, что несколько значений в b матче один или несколько значений в a.

Если вы хотите равные отсчеты, попробуйте запустить запросы, как это:

Select count(*) 
from a 
where exists (select 1 from b where a.1 = b.2); 

И потом:

update table a 
    set a.2 = b.3 
    where exists (select 1 from b where a.1 = b.2); 

Если таблицы не изменились между запросами, то они должны сообщить тот же количество строк.

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