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链接。我说得对吗?