Oracle更新具有多个值的列的列

时间:2017-01-05 12:48:40

标签: sql oracle stored-procedures

我有下表T1:

+----------+----------+
| type     |    flag  |
+----------+----------+
| TTT AU   |          |
| TTT PL   |          |
| TTT      |          |
| XXX      |          |
+----------+----------+

我想进行更新,其中包含值“TTT AU”和“TTT PL”的所有列类型的标志位于1且 其他人在0。 flag的值最初为null。

我想以非常业余的方式做这件事:

update T1
set flag = 0;

update T1
set flag = 1
where type like '%TTT AU%'
OR type like '%TTT PL%'

使用sql脚本或存储过程以更整洁的方式执行此操作的任何方式?

2 个答案:

答案 0 :(得分:1)

我喜欢regexp_like的简洁。

使用案例:

update T1
    set flag = case 
        when regexp_like(type,'(TTT AU|TTT PL)') then 1 
        else 0 end;

使用OR:

update T1
    set flag = case 
        when type like '%TTT AU%' or type like '%TTT PL%' then 1 
        else 0 end;

注意:如下面的评论中所述,基于OR的解决方案更快。

答案 1 :(得分:0)

您可以使用case

一步完成
update T1
    set flag = (case when type like '%TTT AU%' OR type like '%TTT PL%'
                     then 1 else 0
                end);

如果(如示例数据中)类型包含或不包含这些字符串,我会使用in而不是like

update T1
    set flag = (case when type in ('TTT AU', 'TTT PL')
                     then 1 else 0
                end);