我有下表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脚本或存储过程以更整洁的方式执行此操作的任何方式?
答案 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);