一次更新所有列mysql

时间:2014-01-03 18:10:31

标签: mysql sql

我有下表

No A B C D
A1 1 2 0 0
B1 1 1 1 1
C1 1 1 2 3

我必须查找所有列,如果有任何列是> 1我必须将其更改为1。 所以输出将是

No A B C D
A1 1 1 0 0
B1 1 1 1 1
C1 1 1 1 1

有没有办法一起完成所有操作,而不是在update查询中逐个指定每个列名。我的真实表有185列。

1 个答案:

答案 0 :(得分:1)

使用information_schema非常简单。

例如:

set group_concat_max_len = 4294967295;

select concat(
  'update ',
  table_schema,
  '.',
  table_name,
  ' set ',
  group_concat(concat(' ',column_name,' = least(',column_name,',1)')),
  ';'
) as update_stmt 
into outfile '/tmp/update_all_the_columns.sql'
from information_schema.columns 
where table_schema = 'your_schema'
and table_name = 'your_table';

\. /tmp/update_all_the_columns.sql