Sql 根据其他两个表中的数据更新一个表
我有3个表ADDRESS、PERS\u INFO、ADDRESS\u NEW和以下虚拟数据Sql 根据其他两个表中的数据更新一个表,sql,oracle,sql-update,Sql,Oracle,Sql Update,我有3个表ADDRESS、PERS\u INFO、ADDRESS\u NEW和以下虚拟数据 ADDRESS ----------------------- ID | CITY | LINE1 21 | abc | def 22 | fgh | ijk PERS_INFO --------------------------------------- ID | FIRST_NAME | LAST_NAME | ADDR_ID 45 | Jennifer | Higgins
ADDRESS
-----------------------
ID | CITY | LINE1
21 | abc | def
22 | fgh | ijk
PERS_INFO
---------------------------------------
ID | FIRST_NAME | LAST_NAME | ADDR_ID
45 | Jennifer | Higgins | 21
46 | John | Craig | 22
ADDRESS_NEW
---------------------
ID | CITY | LINE1
1 | abc | def
2 | fgh | ijk
我想在Oracle中编写一个查询,用
ADDRESS\u NEW
表的ID
值替换PERS\u INFO
中的ADDR\u ID
值。
请记住,这只是虚拟数据,我想在UPDATE语句中编写一个没有任何数据的通用查询。请帮忙
这是我试过的代码
UPDATE PERS_INFO
SET PERS_INFO.ADDR_ID =
(SELECT ADDRESS_NEW.ID FROM ADDRESS_NEW, ADDRESS
WHERE ADDRESS.ID = PERS_INFO.ADDR_ID);
请尝试以下更新的查询:
update pers_info
set pers_info.addr_id =
(select y.id
from (select address.*,
row_number() over(order by address.rowid) as link
from address
join pers_info
on address.id = pers_info.addr_id) x
join (select address_new.*,
row_number() over(order by address.rowid) as link
from address_new
join pers_info
on address.id = pers_info.addr_id) y
on x.link = y.link
where x.id = pers_info.addr_id)
我想在Oracle中编写一个查询,将
PERS\u INFO
中的ADDR\u ID
值替换为ADDRESS\u NEW
表的ID
值。如何知道ADDRESS\u NEW
中的哪个ID
用于PERS\u INFO
的哪一行?ID为45的PERS\u INFO
行是否以ID为1或2的ADDR\u结束?46岁怎么样?为什么?ADDRESS
表是否与解决这个问题有关?这个问题被标记为(Oracle公司的一个封闭源代码的商业RDBMS产品)和(一个开放源代码的免费RDBMS产品,现在恰好也归Oracle公司所有)。你用的是哪一个?你能把add_id更新为addr_id-20吗?否则,您需要加入所有字段(或关键字段)以获得正确的新地址id@JustinCave对您是对的PERS\u INFO
行的ID
45最后的ADDR\u ID
为1,因为当ADDR
的ADDR\u ID
与ADDR\u ID
的ID
匹配时,ADDR\u ID
的PERS\u INFO
。这不是一个问题,因为city和line1也可能是重复的吗?如果有2个以上的ID具有相同的city和line1值,则可能是,但是根据您的数据,除了这两个字段之外,没有任何东西将ADDRESS\u NEW与ADDRESS相连接,除非这些表中有您在示例中没有给出的列。这两个表ADDRESS
和ADDRESS\u NEW
在列数相同的情况下完全相同,但很可能会有超过2个ID具有相同的city
和line1
@arbit\s,那么从逻辑上讲,您不可能做到这一点这是因为没有任何东西可以将ADDRESS\u NEW连接到ADDRESS。使用游标或其他PL/SQL难道不可能吗?如果我能将ADDRESS
的ID
s放到某个游标中,并根据游标不断更新PERS\u INFO
的ADDR\u ID