Sql 如何在同一个表中的角色之间交换值

Sql 如何在同一个表中的角色之间交换值,sql,oracle,Sql,Oracle,假设我有一张桌子: ID ROLE NAME TITLE -- ---- ---- ----- 10 DEF John Manager 11 UPD Sam Engineer 12 DEF Jill Lead 13 UPD Ray Engneer 我需要交换值并得到结果: ID ROLE NAME TITLE -- ---- ---- --

假设我有一张桌子:

ID    ROLE    NAME    TITLE
--    ----    ----    -----
10    DEF     John    Manager
11    UPD     Sam     Engineer
12    DEF     Jill    Lead
13    UPD     Ray     Engneer
我需要交换值并得到结果:

ID    ROLE    NAME    TITLE
--    ----    ----    -----
10    DEF     Sam     Engineer
11    UPD     John    Manager
12    DEF     Ray     Engineer
13    UPD     Jill    Lead
如何使用Oracle 11g实现这一技巧 谢谢。

更新表dst
从表src
设置dst.name=src.name
,dst.title=src.title
其中dst.id在(10,11)中
和(10,11)中的src.id
和src.id dst.id
;

添加更多包含示例数据的行,并相应调整结果。您只需要交换这两个名称,还是需要交换多个实例/多个名称?有姓氏和更多列,但我认为基本相同。ID是唯一的。所以角色仍然存在,但名称可能会改变。问题是,为什么要交换第10行和第11行中的值,而不是第10行和第12行、第13行或第14行中的值?好吧,你可以用13换10,用12换11?你确定这是有效的Oracle语法吗?不,我不是。(但很容易改变)
UPDATE the_table dst
FROM the_table src
SET dst.name = src.name
        , dst.title = src.title
WHERE dst.id IN (10,11)
AND src.id IN (10,11)
AND src.id <> dst.id
        ;