繁体   English   中英

如何更新一列值以包含 MySQL 中表的两列中的所有值?

[英]How do I update one column value to contain all of the value in two columns of a table in MySQL?

我是一名大学生,目前正在学习SQL攻击与预防。 我们需要做一个练习

将您的 first_name 更新为 email 和所有管理员用户的密码(假设用户表中有一个名为 is_admin 的字段,如果用户不是管理员,则该字段为 0,如果用户是管理员,则为 1)。 这样,当您注销并重新登录时,它不会说 Welcome [your first_name],而是说 Welcome [first_name 字段中存储的任何内容]。

假设我的 users 表中有 6 行,我的 id 是 6

我尝试对 email 和密码使用组 concat

SELECT group_concat(email, " ", password) 
AS account_information FROM users
WHERE is_admin = 1

到目前为止它有效,它返回了 1 行,其中包含所有 email 和管理员用户的密码,我认为这是我应该为我的 first_name 设置子查询的代码。 现在我对它进行了子查询,以使用此代码更新我的 first_name。

UPDATE users
SET first_name = (SELECT group_concat(email, " ", password) AS account_information
FROM users
WHERE is_admin = 1)
WHERE id = 6

我收到错误 1093:说我无法在 FROM 子句中为 UPDATE 指定目标表“用户”

有人可以帮我做这个练习吗?

使用表的 CROSS 连接到返回连接值的查询:

UPDATE users u
CROSS JOIN (SELECT GROUP_CONCAT(email, ' ', password) new_name FROM users WHERE is_admin = 1) t
SET u.first_name = t.new_name
WHERE u.id = 6;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM