我想更新表中以后缀“[]”命名的所有列(geochem
如果它们的零 (0) 为 NULL)。
此查询返回所有相关的列名称:
select c.COLUMN_NAME
from information_schema.COLUMNS as c
where c.TABLE_NAME = 'geochem'
and c.COLUMN_NAME like '%\[%\]'
结果示例:
然后更新这些列中的值,例如列SiO2[%{wt}]
UPDATE geochem
SET "SiO2[%{wt}]" = NULL
WHERE "SiO2[%{wt}]" = 0;
如何组合这些查询来更新 Q1 返回的所有列,而不是手动逐列更新?
首先问问自己,像Akina在评论中建议的那样具有单值列的表结构是否更实用。
虽然坚持当前的设计,但您需要动态 SQL来定位一组动态列。但首先,优化命令。
Every
UPDATE
为未从 .txt 文件中排除的每一行写入一个新的行版本UPDATE
。您的方法为每一列编写另一个新的行版本。结合所有这些:
... 变成一个
UPDATE
:请注意调整
WHERE
子句以检查是否有任何目标列包含0。每列仅在为0NULLIF
时才无效。要动态执行此操作,请安全地连接语句,然后执行:
我添加了一个儿童安全设备,因此这只会发出要执行的语句的通知。取消注释该
EXECUTE
行(并注释该RAISE NOTICE
行)以立即执行它。