我意识到一个特定的子查询会降低性能,并且很好奇是否有更好的方式编写这样的Case语句。我试图在可能的情况下使用“ =”,但经常需要“ like”语句。我的问题是:
如果column_a = 1,此语句会立即返回一个值,还是会继续读取后续的“或”语句?
case
when column_a = 1
or column_b like '%string a%'
or column_b like '%string b%'
or column_b like '%string c%'
then 'Return A'
when column_a = 2
or column_b like '%string d%'
or column_b like '%string e%'
or column_b like '%string f%'
then 'Return B'
.
.
.
else 'Return Z'
end
最好是显示一长串的“或”,或者将每张支票放在自己的case语句中,即更好。
case
when column_a = 1
then 'Return A'
when column_b like '%string a%'
then 'Return A'
when column_b like '%string b%'
then 'Return A'
.
.
.
答案 0 :(得分:0)
如果column_a = 1,此语句会立即返回一个值,还是会继续读取后续的“或”语句?
该语句将立即返回结果,而不评估其余OR
最好是显示一长串的“或”,或者将每个检查放在自己的case语句中
我建议使用前者-至少保持可读性
另一个重写多个LIKEs语句的选项是使用
REGEXP_CONTAINS(column_b, r'string a|string b|string c')