相关疑难解决方法(0)

我在Oracle中加入的更新语句出了什么问题?

我正在使用Oracle 10g数据库.

我有以下两个表:

T_DEBTOR :
    - ID_DEBTOR
    - HEADER
T_ELEMENT :
    - ID_ELEMENT
    - ID_DEBTOR
    - INSURER
Run Code Online (Sandbox Code Playgroud)

这两个表使用ID_DEBTOR字段连接.

我想仅在HEADER不为空时才使用关联的T_DEBTOR.HEADER更新T_ELEMENT.INSURER值.换句话说:

If T_DEBTOR.HEADER != null
    Then T_ELEMENT.INSURER = T_DEBTOR.HEADER
    Else T_ELEMENT.INSURER is not modified!
Run Code Online (Sandbox Code Playgroud)

我尝试使用以下SQL查询:

update
    T_ELEMENT elt
    set elt.INSURER = (
        select HEADER
            from T_DEBTOR debtor
            where
                debtor.HEADER is not null
                and debtor.ID_DEBTOR = elt.ID_DEBTOR);
Run Code Online (Sandbox Code Playgroud)

此查询适用于链接到具有HEADER非空的debtors的所有元素.但是,当T_DEBTOR.HEADER为null时,此查询将T_ELEMENT.INSURER设置为null,这是不正确的.

即:

If T_DEBTOR.HEADER != null
    Then T_ELEMENT.INSURER = T_DEBTOR.HEADER   --> This part is OK
    Else T_ELEMENT.INSURER is set to null      --> This part is …
Run Code Online (Sandbox Code Playgroud)

sql oracle sql-update

6
推荐指数
1
解决办法
1万
查看次数

如何摆脱 ORA 01779 错误:密钥保留表

这是sql语句:

UPDATE 
(SELECT table1.nbqe as OLD_nbqe, table2.nbqe as NEW_nbqe,
  table1.adr1 as OLD_adr1, table2.adr1 as NEW_adr1
  table1.adr3 as OLD_adr3, table2.adr2 as NEW_adr3
 FROM table1
 INNER JOIN table2
 ON table1.cg= table2.cg AND table1.ce = table2.ce
) t
SET t.OLD_nbqe = t.NEW_nbqe, t.OLD_adr1 = t.NEW_adr1, t.OLD_adr3 = t.NEW_adr3
Run Code Online (Sandbox Code Playgroud)

这会发生 01779 错误:无法修改映射到非键保留表的列

如何修改sql语句来实现操作?

注意:这个问题不重复

table1 columns :
 nbqe
 adr1
 adr2
 adr3
 cg
 ce

table2 column :
 nbqe
 adr1
 adr2
 cg
 ce
Run Code Online (Sandbox Code Playgroud)

在表2中,cg + ce是单个键

在表 1 中,您可以拥有同一对 (cg、ce) 的多个记录。

这些表没有任何约束,甚至没有主键或任何东西。


我会以不同的方式问它。sql语句可能是错误的。

更新中的选择返回表 1 …

sql oracle

3
推荐指数
1
解决办法
5234
查看次数

标签 统计

oracle ×2

sql ×2

sql-update ×1