2011-01-12 4 views
2

Как обновить StatusID в таблице X с помощью таблицы Y?Обновление с помощью Select

Таблица X имеет SourceId и старый StatusID
Таблица Y имеет SourceId и новый StatusID

update x 
set StatusID= (select StatusID from Y) 
where 
SourceID = (select SourceID from Y) 

Правильно ли это? Я боюсь запустить запрос на случай, если он все испортит ....

Я использую соединения, чтобы получить StatusID для таблицы Y, поэтому я думаю, что мне нужно использовать SELECT.

Это, как я получаю SourceId и StatusID для таблицы Y

select t2.Sourceid, t3.ActionID 
from tblSource t2 
right join Y t1 on t1.BaselineSourceKey= t2.tempSourceID 
right join lkuActionCode t3 
     on t3.actioncode = CASE 
     WHEN t1.actionCode = 'R' THEN 'N' 
     WHEN t1.actionCode = 'B' THEN 'R' 
     WHEN t1.actionCode = 'A' THEN 'R' 
     WHEN t1.actionCode = 'E' THEN 'N' 
     WHEN t1.actionCode = 'F' THEN 'S' 
     WHEN t1.actionCode = 'G' THEN 'S' 
     WHEN t1.actionCode = 'K' THEN 'DP' 
     WHEN t1.actionCode = 'Q' THEN 'C' 
     WHEN t1.actionCode = 'S' THEN 'AER' 
     WHEN t1.actionCode = 'T' THEN 'AEN' 
     WHEN t1.actionCode = 'U' THEN 'C' 
     WHEN t1.actionCode = 'V' THEN 'UR' 
    WHEN t1.actionCode = 'W' THEN 'R'    
     END 
    where actionid <> 10 and actionid <> 8 and actionid <> 3 
+0

Что именно вы пытаетесь сделать? Заполнить новый столбец или согласовать данные друг с другом? – 182764125216

+1

Что вы собираетесь делать, если этот 'select StatusID from Y' запрашивает более одной строки данных? – VoodooChild

+1

То, что вы разместили, является наиболее поддерживаемым средством обновления таблицы на основе значения от другого. MySQL и SQL Server - это единственные базы данных, которые я знаю о поддержке JOINs в синтаксисе UPDATE. –

ответ

3

Это может быть проще

update x 
set StatusID= Y.StatusID 
from Y 
where y.SourceID = X.SourceID 

Если доступ, то вы можете использовать

update x inner join y on y.sourceid=x.sourceid 
set x.statusid = y.statusid 
+0

no it's sql, но где я использую свой выбор для получения правильных данных из таблицы Y? –

+0

Я закончил тем, что создал временную таблицу с запросом выше, и обновил таблицу с вашим предложением, спасибо –

2

Я не уверен, что работает. Попробуйте:

update x set StatusID=Y.StatusID 
from Y where (x.SourceID=Y.SourceID); 

ETA: Это должно работать в PostgreSQL, но я не уверен, о других диалектах SQL.

1

ОБНОВЛЕНО
В SQL Server вы можете сделать это:

UPDATE A 
SET A.StatusID= B.StatusId 
FROM TableX AS A 
JOIN TableY AS B 
ON A.SourceID = B.SourceID 

В обновленной вопрос, теперь вы просто делаете SELECT, он не собирается обновлять какие-либо записи на всех. Какую базу данных вы используете?

+0

SQL 2005. Выберите, что я показываю, получает SourceID и новый ActionID, который затем мне нужно обновить таблицу X. но я не могу понять, как это сделать .... –

+0

@xrum Есть ли причина для всех «ПРАВИЛЬНЫХ СОЕДИНЕНИЙ»?, потому что в конечном итоге вы можете получить исходный NULL на выходе вашего 'SELECT' – Lamak

1
update x, y 
    set x.StatusID=y.StatusID 
    where x.SourceID=y.SourceID 
+0

Я использую присоединяется, чтобы получить StatusID для таблицы X, поэтому я думаю, что мне нужно использовать select. –

2
update x 
set StatusID = y.StatusID 
from x 
join y on x.SourceID= y.SourceID 
Смежные вопросы