oracle中的更新语句与join [重复]

Posted

技术标签:

【中文标题】oracle中的更新语句与join [重复]【英文标题】:update statement in oracle with join [duplicate] 【发布时间】:2014-12-31 00:55:31 【问题描述】:

我已经创建了这个 sql,我需要用给定的结果更新表

SELECT DISTINCT t1.t1_val3, t1.t1_val4
                DECODE (b_val,
                        'A', 'Its A',
                        'B', 'Its B',
                        'C', 'Its C',
                        NULL
                       ) decode_val,

           FROM t1, t2, t3
          WHERE t1.t1_val = t2.t2_val
            AND t2.t2_val = t3.t3_val
            AND t3.t3_val2 <> 'PSA'
            AND t3.t3_val2 = 'Y'

现在使用这个查询我需要更新 t1 表。

类似的,

update t1 
set
t1.val5=decode_val
where t1.t1_val3= value returned from above query(first column t1_val3) 
and t1.t1_val4= value returned from above query(2nd column t1_val4)

DB - 10g

【问题讨论】:

【参考方案1】:

试试这个:

update t1 
set
t1.val5 =DECODE (b_val,
                    'A', 'Its A',
                    'B', 'Its B',
                    'C', 'Its C',
                    NULL
                   ) 

       FROM t1, t2, t3
      WHERE t1.t1_val = t2.t2_val
        AND t2.t2_val = t3.t3_val
        AND t3.t3_val2 <> 'PSA'
        AND t3.t3_val2 = 'Y'

【讨论】:

请在提交前验证您的帖子,始终使用代码标签并检查标签是否正确应用。 我是新来的。对不起 :) 没问题。我已经编辑了你的答案。 这也适用于我。 将其标记为答案,这可能对某人有所帮助【参考方案2】:

由于您使用的是 10g,MATCHEDNOT MATCHED 子句现在是 optional

MERGE INTO t1 a
USING (SELECT DISTINCT t1.t1_val3, t1.t1_val4
                DECODE (b_val,
                        'A', 'Its A',
                        'B', 'Its B',
                        'C', 'Its C',
                        NULL
                       ) decode_val,

           FROM t1, t2, t3
          WHERE t1.t1_val = t2.t2_val
            AND t2.t2_val = t3.t3_val
            AND t3.t3_val2 <> 'PSA'
            AND t3.t3_val2 = 'Y') b
ON(a.t1_val3 = b.t1_val_3 and a.t1_val4 = b.t1_val4)
WHEN MATCHED THEN 
   UPDATE SET a.t1.val5 = b.decode_val

【讨论】:

谢谢拉利特。像魅力一样工作:)

以上是关于oracle中的更新语句与join [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何在mysql查询的更新语句中加入多个表[重复]

使用 INNER JOIN 更新 SQL Server 中的多个表 [重复]

带有分析的 Oracle 更新语句失败

oracle中的存储过程有啥作用,该怎么理解?(数据更新的话用update语句不就完了吗)

使用 LEFT JOIN 更新 MySQL 中的多个表

根据另一个表中的值更新表中的值[重复]