Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 一次更新所有列_Mysql_Sql - Fatal编程技术网

Mysql 一次更新所有列

Mysql 一次更新所有列,mysql,sql,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列。使用信息\u模式这非常简单 例如: set group_concat_max_len = 4294967295; select con

我有下表

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列。

使用
信息\u模式
这非常简单

例如:

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

不,不是真的。不是在普通sql中。您可以查询信息\u模式以获取字段名并动态构建185列更新查询,但这不再是普通sql。与剪切/粘贴所有字段名并将其格式化为单个字段相比,您可能还需要花费更多的时间调试sql生成逻辑update@MarcB谢谢是的,我是这么做的。。我想会有一个更优雅的方法来做这件事。你坚持这个模式吗?如果没有,您可以重构为3个表,其中一个表有“Item”、“Attribute”和“Value”等列。@Rick-EAV表有自己的问题集,这会使将来的查询变得非常困难。它们确实有自己的位置,但不需要经常使用。这就是说,185列似乎有点太宽了,所以它可能需要另一种外观(尽管问题/站点不同)。