帮助简单的SQL更新+加入

时间:2010-11-15 15:58:51

标签: sql

我认为这应该很简单,但我是SQL新手。

我有两张桌子。一个是项目ID和描述的列表,另一个是相应的旧ID和新ID的映射。像这样:

    ID_MAP
OLD_ID   NEW_ID
---------------
1        101
2        102

    ITEMS
ID       DESCRIPTION
--------------------
1        "ItemA"
2        "ItemB"
...
101      <null>
102      <null>

我需要根据地图将旧项目描述复制到新项目。我想我需要在inner join内使用update,但它不起作用,我甚至不确定这是正确的方法。

我正在尝试像

这样的陈述
update ITEMS
set (select ITEMS.DESCRIPTION
     from ITEMS
     join ID_MAP
     on ITEMS.ID = ID_MAP.NEW_ID) = 
    (select ITEMS.DESCRIPTION
     from ITEMS
     join ID_MAP
     on ITEMS.ID = ID_MAP.OLD_ID)

但当然它不起作用。我该怎么办?

2 个答案:

答案 0 :(得分:5)

update new_item
    set description = old_item.description
    from items old_item
        inner join id_map im
            on old_item.id = im.old_id
        inner join items new_item
            on im.new_id = new_item.id

答案 1 :(得分:2)

根据您的DBMS(SQL Server与Oracle)中是否有UPDATE .. FROM,一种可能性是对每个列更新使用相关子查询。如果能够UPDATE FROM,那就不方便了。

UPDATE items i
SET i.id = (
  SELECT new_id
  FROM id_map
  WHERE old_id = i.id
)
, description = (
  SELECT description
  FROM id_map
  WHERE old_id = i.id
)

您也可以将以下内容添加到最后

WHERE EXISTS (
  SELECT 1
  FROM id_map
  WHERE old_id = id
)