Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 根据其他两个表中的数据更新一个表_Sql_Oracle_Sql Update - Fatal编程技术网

Sql 根据其他两个表中的数据更新一个表

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

我有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   | 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