2012-04-30 3 views
0
UPDATE table1 
SET variable1 = (SELECT variable1 FROM table2), 
    variable2 = (SELECT variable2 FROM table2) 
WHERE table1.variable3 = table3.variable3; 

기본적으로 table2의 데이터를 사용하여 table1을 업데이트하는 쿼리를 작성하고 있습니다. 그러나 where 문은 table1과 table3을 사용합니다. 이 작업이 작동하는지 아니면 일부 제약 조건을 만들기 위해 SELECT 후에 WHERE 문을 사용해야하는지 궁금합니다.이 UPDATE 문은 작동합니까?

+1

이의 값에 table3도 있습니다 table1의 모든 행에만 작동합니다 것입니다 : 그것은 일반적으로 IMO 이러한 문제를 접근하는 더 나은 방법입니다. BTW 테이블 3은 무엇입니까? – wildplasser

+0

어떤 데이터베이스, 다른 데이터베이스에서 구문이 다를 수 있습니다 – HLGEM

+1

table3이 범위 테이블에 없으므로 * 모든 DBMS에 오류가 발생합니다. – wildplasser

답변

4

아니요. 중첩 된 하위 쿼리가 단일 행만 반환한다는 명시적인 보장이 없기 때문에 아니요.
편집 : 표 3은 JOIN 에드 제대로 (전혀)

하는 것이 목표지만 기능 아마도 정확하지이 변경 ... 고려하지 않기 때문에 질문에 @wildplasser 코멘트 당 그리고, 그것은 또한 실패합니다는 각 하위 쿼리에서 단일 행 반환하기 때문에 :

UPDATE 
    table1 
SET 
    variable1 = (SELECT TOP 1 variable1 FROM table2) 
    ,variable2 = (SELECT TOP 1 variable2 FROM table2) 
FROM 
    table1 
JOIN 
    table3 
     ON table3.variable3 = table1.variable3 
+0

실제로 테이블 3에 대한 적절한 조인 구문을 사용해야합니다. – Taryn

+0

@bluefeet, 실제로 편집했습니다. – Matthew

+0

@downvoter ... 설명해 주시겠습니까? – Matthew

2

없음을하지만, 수.

UPDATE table1 
    SET variable1 = (SELECT TOP 1 variable1 FROM table2), 
     variable2 = (SELECT TOP 1 variable2 FROM table2) 
FROM table1 
    INNER JOIN table3 on table1.variable3 = table3.variable3 
0

아니요, 작동하지 않습니다. (대부분?) RDBMS를 사용하면 JOINed UPDATE를 수행 할 수 있습니다. 표 2는 정확히 하나 개의 행을 포함하는 경우

UPDATE table1 
SET variable1 = table2.variable1, 
    variable2 = table2.variable2 
FROM table1 
JOIN table3 ON 
    table1.variable3 = table3.variable3 
--Presumably there's only 1 row in table2, with no JOIN criteria 
CROSS JOIN table2; 

UPDATE table2

관련 문제