假设我有这个选择语句:
SELECT ut.user_id,
a.firstname,
a.surname,
u.username,
u.email_address
FROM administrators a
JOIN user_types ut JOIN users u ON a.admin_id = ut.type_id
AND u.user_id = ut.user_id AND ut.user_type = 'ADMIN';
假设我想更新 user_id = 1 行中的所有值;
我可以单独更新每个表,或者我可以创建一个像这样的 View :
CREATE OR REPLACE VIEW full_admin AS
SELECT ut.user_id,
a.firstname,
a.surname,
u.username,
u.email_address
FROM administrators a
JOIN user_types ut
JOIN users u on a.admin_id = ut.type_id
AND u.user_id = ut.user_id
AND ut.user_type = 'ADMIN'
然后我可以写:
UPDATE full_admin
SET firstname = 'blah', etc, etc
WHERE user_id = 1;
这将更新所有表中的所有行
有没有办法在不创建 View 的情况下做到这一点?
类似于:
UPDATE (
SELECT ut.user_id,
a.firstname,
a.surname,
u.username,
u.email_address
FROM administrators a
JOIN user_types ut
JOIN users u ON a.admin_id = ut.type_id
AND u.user_id = ut.user_id
AND ut.user_type = 'ADMIN'
)
AS temp_table
SET firstname = "ALEX"
WHERE user_id = 1;
但是这不起作用
最佳答案
如果你想update columns in both管理员和用户同时,那么类似这样的事情应该可以解决问题:
UPDATE administrators a
INNER JOIN user_types ut ON a.admin_id = ut.type_id
INNER JOIN users u ON u.user_id = ut.user_id
SET u.firstname = "ALEX", a.SomeColumn = 'X'
WHERE u.user_id = 1
AND ut.user_type = 'ADMIN'
SET 语句部分可以作用于连接中的任何列。
(如果这就是您要问的!)
关于mysql - 使用连接表进行 sql 更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9193980/