SQL更新一个表中的值以匹配Oracle SQL Developer中另一个表的值

SQL更新一个表中的值以匹配Oracle SQL Developer中另一个表的值,sql,oracle,sql-update,Sql,Oracle,Sql Update,我有两个表t1和t2: t1 t2 ------------- ------------- NAME | CODE NAME | CODE ------------- ------------- ABC | 1651 KKK | 127 CDE | 127 KKK | 127 SKND |

我有两个表
t1
t2

  t1                       t2
 -------------            ------------- 
  NAME | CODE              NAME | CODE
 -------------            -------------
   ABC | 1651               KKK |  127 
   CDE |  127               KKK |  127 
  SKND |  127               AAA |   66 
                            BBB | 1651
我想更新
t1中
name
列中的值,以匹配
t2中
name
列中的值

t1
中,
code
值可以有不同的
name
值,但在
t2
中,一个
code
始终具有相同的
name
,但是有更多行具有相同的
code
,因为
t2
具有其他不同的列

我试过这样的方法:

UPDATE t1
SET t1.NAME = 
  (
    select t2.NAME 
    from t2
    inner join t1
    on t1.CODE = cast(t2.CODE as varchar2(128))
  ) 
where t1.CODE in ( select t2.CODE from t2 );
问题是,选择设置
t1.NAME
不会只返回一行,因为
t1
t2
中的代码都不是唯一的

我已经到处找了,但是所有的问题在他们想要的表中只有唯一的值

我认为我离解决方案还有很长的路要走,我对SQL还是相当陌生的

基本上,我希望
t1
看起来像这样:

-------------
 NAME | CODE
-------------
  BBB | 1651
  KKK | 127
  KKK | 127

我使用的是
Oracle SQL Developer
,因此我不能直接在
Update
中使用
Select
,我想您需要一个相关的子查询:

UPDATE t1
    SET t1.NAME = (select t2.NAME 
                   from t2
                   where t1.CODE = cast(t2.CODE as varchar2(128))
                  ) 
    where t1.CODE in (select t2.CODE from t2);
如果仍然存在重复问题,可以将
和rownum=1
添加到子查询中,或者使其
选择
类似于
选择max(t2.name)


注意:您可能只需要在表之间建立适当的外键关系,并在查询表时使用
join
来获取信息,而不是更新值。

请删除未涉及产品的标签。据我所知,外键必须链接到另一个表中的唯一值(例如ID),我在两个表中都有多个具有相同名称和代码的条目,但在其他列中它们的值不同,因此我必须有多个具有相同代码的条目,因此我无法将它们与fk链接。我说得对吗?