2012-02-24 3 views
0

는 내가보기에 세 개의 테이블에 합류 한 후 내가보기를 업데이트하고이 오류MySQL의 멀티 업데이트 오류

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

ER_VIEW_MULTIUPDATE 

내가 오류를 이해를 얻을하려고합니다. 한 번에 여러 테이블을 업데이트 할 수 없습니다.

... 이전에이 작업을 수행했습니다. 지난 주 정확한, 동일한 컴퓨터에서 동일한 MySQL 설치.

필자는 이전에 뷰를 통해 테이블을 결합 (사실 동일한 테이블)하고 아무런 문제없이 뷰를 업데이트했음을 약속드립니다.

아무도 왜 작동하지 않는지 알고 있습니까?

지난 주 일한 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"]}" 

지금

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 = '[email protected]' 
WHERE 
    user_id = 2 
+0

그것은 도움이 될 것입니다. 뷰와 'UPDATE'쿼리를위한 SQL. 나는 당신의'UPDATE'가 하나 이상의 테이블에 속하는 필드를 수정하고 있지만, 어떤 코드를 보지 않고서는 알 수 없다고 생각합니다. –

+0

지난 주에 사용한 업데이트 SQL을 게시하십시오! :) – Pentium10

+0

오늘 사용중인 테이블과 사용자 중 하나에 권한 문제가있을 수 있습니다. 이는 "지난 주"에서 사용한 사용자와 다를 수 있습니다. – vulkanino

답변

2

지난 주 테이블을 수정 직접 UPDATE 질의했다 일한 SQL을 시도하는 SQL 코드 메신저, 지금 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'); 
+0

아 ... 코드를 더 읽기 쉽게 만들었을뿐입니다. 감사 –