MySQL多更新错误

时间:2012-02-24 15:20:59

标签: mysql

我已将三个表连接到一个视图中,然后我尝试更新视图并获得此错误

#1393 - Can not modify more than one base table through a join view

ER_VIEW_MULTIUPDATE

我理解错误。我不能一次更新多个表。

但是......我以前做过这个。上周确切地说,在同一台机器上,安装相同的mysql。

我向你保证,我之前通过一个视图(相同的表格infact)将表连接在一起,并且没有任何问题地更新了视图。

有人知道它为什么不起作用吗?

上周运行的PHP代码

"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"]}"

我正在尝试的SQL代码

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

1 个答案:

答案 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' );