突然发现 where 子句可以使用 case when,一个震惊,发现新大陆!?居然可以这么使用。
震惊之余,沉思细想,其实只是自己没这么使用过而已。固有的思维限制了想象的空间,影响到了认识的层次。谁说了 mysql where 子句中不能使用 case when,可是自己又是否清楚 where 子句中该怎么使用?都知道 mysql 官方网站写得一清二楚,SQL 标准罗列的明明白白,可是呢,然并卵,收藏夹里吃灰而已。人之所以不成才,不是因为没有路可走,而是有路不愿走。大家只是做着常人所做的事,却梦想这非常人的成功,最终谁又会是那个唯一的例外呢?
不要感慨,唏嘘,行动才是最大。mysql where 子句允许使用函数的。case when 也只不过是一种特殊的函数,既然 where 子句可以使用 isnull,为什么不能使用 case when 呢。
小结:
mysql where case when
-- 粘贴而来 https://blog.csdn.net/qq_27686779/article/details/80318252
select *
from A, B
where
CASE
when A.id = 0 then B.name in ('aaa', 'bbb')
when A.id = 1 then B.name in ('bbb', 'ccc')
when A.id = 2 then B.name in ('ccc', 'ddd')
END;
select *
from A, B
where B.name =
CASE
when A.id = 0 then 'aaa'
when A.id = 1 then 'bbb'
when A.id = 2 then 'ccc'
END
大胆使用,法不禁止,则可略试一二,语法为禁止,就可以使用。多看看官网,看看实现原理。