2015-04-09 2 views
0

При обновлении данных в таблице1 с inner join, возвращающим O row updated, обе таблицы находятся в другой базе данных. У меня есть альтернативный метод для обновления этого, но я не понимаю, почему мой вопрос INNER JOIN поступил неправильно.запрос обновления с внутренним соединением [обновлено 0 строк]

Не работает с внутренним соединением

UPDATE DB1.table1 
SET t1.column3='value3' 
from DB1.table1 t1 
INNER JOIN DB2.table2 t2 on t1.column2=t2.column2 
WHERE (t1.column1 = 'value1') 
AND (t2.column3 = 'value3') 

Рабочий запрос без использования внутреннего соединения.

UPDATE DB1.table1 SET column3='value3' WHERE (column1 = 'value1') 
AND (column3 = 'value3') AND (column2 in (select column2 from DB2.table2 
where column3='value3' and column3='value3' and column4='value4')) 



DB1..table1 
column1 column2 column3 column4 
c1 c2 c3a c4 
c1 c2 c3a c4 
c1 c2 c3b c4 
c1 c2 c3b c4 

DB2..table2 
column1 column2 column3 column4 
c1 c2 c3a c4 
c1 c2 c3a c4 
c1 c2 c3b c4 

Может ли любое тело предложить это?

ответ

1

Вы имеете некоторую синтаксическую ошибку в вашем заявлении. Используйте псевдоним в SET и UPDATE или частично использовать TableName, не перепутайте:

UPDATE t1 
SET column3='value3' 
from DB1.table1 t1 
INNER JOIN DB2.table2 t2 on t1.column2=t2.column2 
WHERE (t1.column1 = 'value1') 
AND (t2.column3 = 'value3') 
+0

Работаю отлично –

0

Вы обновляете DB1.table1 но Установка Column t1.Column3, поэтому вы не получаете никаких строк обновляются

вы должны сделать что-то вроде этого

UPDATE DB1.table1 
SET DB1.table1.column3='value3' 
FROM DB1.table1 t1 
INNER JOIN DB2.table2 t2 on t1.column2= t2.column2 
WHERE (t1 .column1 = 'value1') 
AND (t2.column3 = 'value3') 
+0

Работаю отлично –

0

Это синтаксис, который нужно использовать для SQL Server:

UPDATE t1 SET 
t1.column3 = 'value3' 
FROM DB1.table1 t1 
INNER JOIN DB2.table2 t2 ON t1.column2 = t2.column2 
WHERE 
(t1.column1 = 'value1') AND 
(t2.column3 = 'value3') 
+1

отлично работает –

1

в первом запросе, который не работает у вас есть:

UPDATE DB1.table1 
SET t1.column3='value3' 
. 
. 
. 

вы упомянули фактическое имя таблицы для update но в set заявления вы использовали alias так что есть путаница.

и второй вы сказали:

UPDATE DB1.table1 SET column3= ... 

вы использовали фактическое имя таблицы и столбца, и нет ничего плохого здесь и код работает отлично.

Так при использовании псевдонимов, то попробуйте использовать его в обновлении части также ИЛИ использовать настоящие имена везде, ниже буксировки запрос должен работать для вас:

UPDATE DB1.table1 
SET DB1.table1.column3=DB2.table2.column3 
FROM DB1.table1 
JOIN DB2.table2 ON DB1.table1.column2=DB2.table2.column2 
       AND DB1.table1.column1 = 'value1' 
       AND DB2.table2.column3 = 'value3' 

и

UPDATE t1 
SET t1.column3=t2.column3 
FROM DB1.table1 t1 
JOIN DB2.table2 t2 ON t1.column2=t2.column2 
        AND t1.column1 = 'value1' 
        AND t2.column3 = 'value3' 
+0

Я нашел свою ошибку, вы правильно благодарили за объяснение. –

+0

Добро пожаловать ... – jfun

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