使用选择进行更新

时间:2011-01-12 20:20:11

标签: mysql sql select sql-update

如何使用表Y更新表X中的StatusID?

表X具有SourceID和旧的StatusID
表Y具有SourceID和新StatusID

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

这是对的吗?我害怕运行查询以防万一将其搞砸....

我正在使用联接来获取表Y的StatusID,所以我认为我需要使用SELECT

这就是我为表Y获取SourceID和StatusID的方式

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

5 个答案:

答案 0 :(得分:3)

这可能更简单

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

如果是Access,则可以使用

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

答案 1 :(得分:2)

我不确定是否有效。尝试:

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

ETA:这应该适用于PostgreSQL,但我不确定其他SQL方言。

答案 2 :(得分:2)

update x
set StatusID = y.StatusID
from x
join y on x.SourceID= y.SourceID

答案 3 :(得分:1)

<强>已更新
在SQL Server中,您可以执行此操作:

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

在您更新的问题中,现在您只是在做SELECT,它根本不会更新任何记录。您使用的数据库是什么?

答案 4 :(得分:1)

update x, y 
  set x.StatusID=y.StatusID 
  where x.SourceID=y.SourceID