我想对 mysql 中的每一列使用 case 语句。每个 case 语句的 when 内部的逻辑是相同的,这是一个很长的列表。有没有办法最好地写这个。喜欢
case when cond1
then 'xyz' as col1,
'xyz2' as col2,
'uuy' as col3
else null
for all each column end.
最佳答案
简短回答:否
长答案:有点。您可以将逻辑包装到函数中,然后为每列调用它(如果适用),或者使用动态查询 - 脏但可以工作。 考虑一下:
create table t (
alef varchar(100),
bet varchar(100));
set @case := 'case when ''?'' = ''A'' then 1 else 0 end';
set @sql := concat('select ',replace(@case,'?','alef'),',',replace(@case,'?','bet'),' from t');
prepare stmt from @sql;
execute stmt;
最后,如果您真的很懒;)您可以迭代 information_schema.columns View 并使用 s.t. 动态创建 select 语句。沿着这些思路:
set @subCase := '';
select @subCase := concat(@subCase,replace(@case,'?',column_name),',') from information_schema.columns where table_name = 't';
这些代码可能可以安全地包装在过程中。
关于mysql - when 中具有相同逻辑的多个 case 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38831161/