2012-02-08 3 views
0

내가이 select 문이 말 :SQL 업데이트

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;

내가 개별적으로 각 테이블을 업데이트 할 수 또는 내가 지금과 같은보기를 만들 수 있습니다

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; 

을 그리고 그 모든 테이블의 모든 행을 업데이트합니다

보기를 만들지 않고이를 수행 할 수있는 방법이 있습니까?

뭔가 같은 : 조인 된 테이블 구조 업데이트 할 경우이 당연히 그 나던 작업

+0

이보고 다음 번에 모두 관리자와 사용자의 열을 업데이트 할 경우 (즉, 당신이 무엇을 요구 있다면!) : http://stackoverflow.com/questions/6362594/a-conditional- 한 번에 두 테이블 씩 sql-update-statement. 사용자에 대한 가입을 기반으로 관리자의 열을 업데이트하려는 경우 다음을 참조하십시오. http://stackoverflow.com/questions/1293330/how-can-i-do-an-update-statement-with-join- in-SQL. – dash

답변

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 문 섹션이 조인의 열 중 하나에서 작업 할 수 있습니다.

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 
; 

는 (같은 일이 뷰에 적용) 작동 그러나

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

'조인 된 테이블 구조가 업데이트 할 수 있음'이란 무엇을 의미합니까? –

+0

모든 가입이 업데이트 할 수있는 것은 아닙니다. LEFT JOINS는 작동하지 않습니다 (DB에는 행을 주소 지정하는 PK가 없습니다). 이것은 Views와 완전히 같습니다. –

0

일부 스크립팅 (PLSQL)을 수행 할 수 있지만 뷰를 통하지 않고 하나의 SQL 쿼리에서 여러 테이블을 업데이트 할 수 있다고 생각하지 않습니다.

PLSQL은 강력하고 복잡하지 않으며 데이터베이스 이벤트에 의해 트리거 될 수 있습니다.