如何检查值不同但类别相同的列

时间:2019-05-13 11:41:05

标签: sql oracle plsql

我的数据库中有两个表。 我想更新从另一个表检索到的一个表中的值,条件是具有不同值的列。

表1

Shape     Rate
------- 
Round            
Heart    
Oval    

表2

Shape     Rate
------- 
BR     2100
PS    2500

现在我要更新表2中第1种能力的“费率”值,其中“ Round”表示BR,“ Rest”则表示PS

如何使用这些值将这两个表连接起来?

我正在使用oracle数据库。

3 个答案:

答案 0 :(得分:1)

merge是以下方式之一:

merge into table1 tgt 
using table2 src
on (tgt.shape = 'Round' and src.shape = 'BR' or tgt.shape <> 'Round' and src.shape = 'PS')
when matched then update set rate = src.rate

dbfiddle demo

答案 1 :(得分:0)

如果我理解正确,您想在table2中选择适当的行来更新table1

鉴于您的示例数据,您可以使用相关的子查询:

update table1 t1
    set rate = (select t2.rate
                from table2 t2
                where (t2.shape = 'BR' and t1.shape = 'Round') or
                      (t2.shape = 'PS' and t1.shape <> 'Round')
               );

您应该真正修复数据。名为shape的两列实际上应该包含相同的值。

答案 2 :(得分:0)

试试这个-

UPDATE TABLE_1
SET RATE = (
    CASE 
        WHEN SHAEPE = 'Round' THEN (SELECT RATE FROM TABLE_2 WHERE SHAPE = 'BR')
        ELSE (SELECT RATE FROM TABLE_2 WHERE SHAPE = 'PS')
    END
)