我需要清除表格中除几列之外的所有列中的值。我可以考虑使用以下查询检索除这两个列之外的所有列名
SELECT `COLUMN_NAME`
FROM `INFORMATION_SCHEMA`.`COLUMNS`
WHERE `TABLE_NAME`='accountuser' AND COLUMN_NAME NOT IN('firstname', 'lastname');
UPDATE accountuser
SET ??
WHERE accountuserid=?;
我不确定如何在 SET
子句中使用结果集中的列名。
我能想到的其他方法是通过分别运行两个查询或显式传递所有列名来在应用程序级别构建查询,但当表更改时它变得不确定。
更新:
将使用此查询的场景是,当在应用程序中删除用户时,该用户的所有列都会被清除,除了名字和姓氏,以便应用程序中对已删除用户的任何引用仍然存在,比如线程中的注释等。我们使用 Spring JDBC 和一个包含所有 SQL 查询的纯文本文件。因此,如果可能的话,我希望在单个查询中使用它,如果不能,我希望在应用程序级别构建查询。
最佳答案
如果你想在这些列中设置NULL
:
SET @sql := '';
SELECT
CONCAT('UPDATE accountuser SET ',GROUP_CONCAT(COLUMN_NAME,'= NULL'),' WHERE accountuser = ', PUT_ACCOUNTUSER_ID_HERE)
INTO @sql
FROM information_schema.columns
WHERE TABLE_SCHEMA ='YOUR_DATABASE_NAME'
AND TABLE_NAME='TABLE_NAME'
AND COLUMN_NAME NOT IN ('firstname','lastname');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE stmt;
注意:在NOT IN
子句中包含主键列
。否则它也将被设置为 NULL
。
关于mysql - 如何在 MySQL 的 SET 子句中使用 SELECT 子句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38956855/