mysql - 如何在 MySQL 的 SET 子句中使用 SELECT 子句?

标签 mysql sql sql-update

我需要清除表格中除几列之外的所有列中的值。我可以考虑使用以下查询检索除这两个列之外的所有列名

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/

相关文章:

javascript - 在我的 WHERE 上使用 IN chop 不正确的 DOUBLE 值

python - 使用 Ruby 或 Python 存储大量外部 API 数据的最佳方法

sql - 在更新语句中具有选择子查询的嵌套 SQL 查询

php - 将 html 表单中的数据插入 sql 数据库(html、php、sql)时,输入的值未保存

sql - 获取大多数可用的条目

c# - ASP.NET CommandArgument Eval 可以包含 2 列吗?

c++ - 在QT C++中更新数据库中的数据集

mySql 联合表无法更新 blob 列

mysql - 合并列并替换 NULL 值

php - 弃用 : mysql_connect(): ERROR