我已将三个表连接到一个视图中,然后我尝试更新视图并获得此错误
#1393 - Can not modify more than one base table through a join view
ER_VIEW_MULTIUPDATE
我理解错误。我不能一次更新多个表。
但是......我以前做过这个。上周确切地说,在同一台机器上,安装相同的mysql。
我向你保证,我之前通过一个视图(相同的表格infact)将表连接在一起,并且没有任何问题地更新了视图。
有人知道它为什么不起作用吗?
"UPDATE administrators AS a INNER JOIN user_types AS ut ON a.admin_id = ut.type_id INNER JOIN users AS u ON u.user_id = ut.user_id SET a.firstname = '{$user_input["firstname"]}', a.surname = '{$user_input["surname"]}', u.email_address = '{$user_input["email_address"]}' WHERE u.user_id = {$user_input["user_id"]}"
CREATE VIEW admin_users AS
SELECT administrators ad
JOIN user_types ut
ON ad.admin_id = ut.type_reference
JOIN users us
ON ut.user_id = us.user_id
WHERE ut.user_type = 'ADMIN'
UPDATE admin_users
SET
firstname = 'alex2',
surname = 'finch2',
email_address = 'test@hotmail.co.uk'
WHERE
user_id = 2
答案 0 :(得分:2)
上周工作的SQL是修改表的直接UPDATE
查询,而您现在正尝试通过视图UPDATE
这些相同的表。这就是改变。使用VIEW
,您一次只能更新一个表。如果要使用一个查询更新多个表,则可以查看存储过程。
这样的事情:
DELIMITER //
CREATE PROCEDURE updateUser(
var_user_id INT,
var_firstname VARCHAR(32),
var_surname VARCHAR(32),
var_email_address VARCHAR(128)
)
BEGIN
UPDATE administrators AS a
INNER JOIN user_types AS ut
ON a.admin_id = ut.type_id
INNER JOIN users AS u
ON u.user_id = ut.user_id
SET a.firstname = var_firstname,
a.surname = var_surname,
u.email_address = var_email_address
WHERE u.user_id = var_user_id;
END//
致电:
CALL updateUser( '$user_id', '$firstname', '$surname', '$email_address' );