Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.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
Oracle update语句多个表_Oracle_Sql Update - Fatal编程技术网

Oracle update语句多个表

Oracle update语句多个表,oracle,sql-update,Oracle,Sql Update,我正在使用Oracle(对它来说还是有点陌生),每次运行下面的update语句时,我都会收到以下错误消息 SQL Error: ORA-00904: "CH"."CONTRACT_ID": invalid identifier 00904. 00000 - "%s: invalid identifier" *Cause: *Action: 以下是查询: UPDATE wr00262_catalogue_201310 ct SET ct.PORTFOLIO_ID = (SELEC

我正在使用Oracle(对它来说还是有点陌生),每次运行下面的update语句时,我都会收到以下错误消息

SQL Error: ORA-00904: "CH"."CONTRACT_ID": invalid identifier
00904. 00000 -  "%s: invalid identifier"
*Cause:    
*Action:
以下是查询:

UPDATE wr00262_catalogue_201310 ct SET
   ct.PORTFOLIO_ID = (SELECT ch.PORTFOLIO_ID 
                       from WR00262_CONTRACT_HEADER ch 
                       WHERE ch.PORTFOLIO_ID = ct.PORTFOLIO_ID)
   WHERE ct.NPC in (SELECT ctl.NPC 
                   FROM wr00262_contract_line ctl 
                    WHERE ctl.CONTRACT_ID = ch.CONTRACT_ID);

我想我可能需要加入,但不太确定在哪里或如何加入。contract\u header表有一个名为contract\u ID的列。

这是一个范围问题。一个子查询中的列对任何其他子查询都不可见。因此,请尝试以下方法:

UPDATE wr00262_catalogue_201310 ct SET
   PORTFOLIO_ID = (
      SELECT ch.PORTFOLIO_ID 
      from WR00262_CONTRACT_HEADER ch 
      WHERE ch.PORTFOLIO_ID = ct.PORTFOLIO_ID
   )
   WHERE ct.NPC in (
      SELECT ctl.NPC 
      FROM WR00262_CONTRACT_HEADER ch 
      join wr00262_contract_line ctl 
         on ctl.CONTRACT_ID = ch.CONTRACT_ID
      WHERE ch.PORTFOLIO_ID = ct.PORTFOLIO_ID
   );

你想达到什么目标?看起来您正在将
PORTFOLIO\u ID
设置为它已有的值。运行该语句时,您会得到以下结果。SQL错误:ORA-01427:单行子查询返回多行01427。00000-“单行子查询返回多行”*原因:*操作:这是由
SET=
子句中的子查询引起的问题。所以这不是伊戈尔引入的错误。您必须为只返回一个公文包ID的子查询定义一个WHERE子句。但正如@Klas指出的,您的语句有点荒谬。@needmorebeerformallaby-您的update语句有问题。看看克拉斯的评论。试着用语言描述你想做什么。抱歉,Klas是正确的,部分问题在于引用了错误的表来提取新的投资组合id。该表应为WR00262NewPortfolioid,列名称为NEWPORTFOLIOID