我有两张表t1
和t2
:
t1 t2
------------- -------------
NAME | CODE NAME | CODE
------------- -------------
ABC | 1651 KKK | 127
CDE | 127 KKK | 127
SKND | 127 AAA | 66
BBB | 1651
我想更新name
中的t1
列中的值,以匹配name
中t2
列中的值。
在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
的选择只会返回1行,因为t1
或t2
中的代码都不是唯一的。
我一直在寻找所有问题,但所有问题在他们想要的价值表中只有唯一的值。
我认为我离解决方案还很远,我对SQL很陌生。
基本上我希望t1
看起来像这样:
-------------
NAME | CODE
-------------
BBB | 1651
KKK | 127
KKK | 127
我使用Oracle SQL Developer
,因此我无法在Select
内直接使用Update
。
答案 0 :(得分:2)
我认为你想要一个相关的子查询:
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);
如果您仍然遇到重复问题,可以将and rownum = 1
添加到子查询中,或将其select
改为select max(t2.name)
。
注意:您可能只需要在表之间建立正确的外键关系,并在查询表时使用join
来获取信息,而不是更新值。