Oracle update语句多个表
我正在使用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
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