mysql - when 中具有相同逻辑的多个 case 语句

标签 mysql sql

我想对 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/

相关文章:

mysql - 使用if条件或CASE连接4个表的Sql查询

sql - 在数据库中存储多项选择值

mysql - 比较行并选择最大值

sql - 为两个不同的实体创建一个表

mysql - 无法添加外键约束错误:

mysql - 我的 SQL 语法中的另一个错误?

mysql - 远程mySQL访问出错

sql - 加入 T-SQL 时计算零值

sql - 将 Excel 导入 SQL 时保留前导零

mysql - 如何转义mysql jdbc连接字符串中的特殊字符