说我有这个选择声明:
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;
行中的所有值我可以单独更新EACH TABLE或者我可以像这样创建一个视图:
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;
这将更新所有表中的所有行
有没有办法在不创建视图的情况下执行此操作?
类似的东西:
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;
然而,这不起作用
答案 0 :(得分: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语句部分可以处理连接中的任何列。
(如果那就是你要问的那个!)
答案 1 :(得分:0)
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 AND ut.user_type = 'ADMIN'
SET u.firstname = "ALEX"
WHERE u.user_id = 1
;
当然,如果连接的表构造是可更新的,这只会起作用(同样适用于视图)。
答案 2 :(得分:0)
你可以做一些脚本(PLSQL),但我不相信你可以在一个SQL查询中更新几个表而不是通过视图。
PLSQL功能强大且不复杂,可以由数据库事件触发。