2012-08-07 3 views
2
UPDATE 
    (
    SELECT 
     a.COL1 
    FROM 
     TABLE1 a, 
     TABLE2 b, 
     TABLE3 c 
    WHERE 
     a.name = b.name 
     c.ccol = b.ccol AND 
     AND b.col1 = 'anyvalue' 
     AND a.col2 = 'anothervalue' 
) u 
SET 
    u.COL1 = 'VALUE' 

TABLE1에 PK가 없으므로이 쿼리가 작동하지 않습니다. 그러한 쿼리를 작성하는 방법은 무엇입니까?오라클에 PK가없는 조인으로 테이블 업데이트

답변

3

다음은 위 달성하려고하는 것 같습니다 무엇을 달성해야 다음

UPDATE TABLE1 
SET  COL1 = 'VALUE' 
WHERE EXISTS 
     ( SELECT 1 
      FROM TABLE2 B 
        INNER JOIN TABLE3 C 
         ON B.Ccol = C.Ccol 
      WHERE b.Name = Table1.Name 
      AND  b.Col1 = 'AnyValue' 
      AND  c.Col1 = 'AnotherValue' 
     ) 
+2

SQL 업데이트를 요청하는지의 SQL에 해당합니다. 그리고 예, TABLE1에 기본 키가 포함되어 있지 않으면이 쿼리는 실패합니다. – Anton

+0

@Anton 응답에서 하위 쿼리를 업데이트하는 방법을 제거했습니다. – GarethD

0

내가 오라클에서 근무 한 적이 있지만, 이런 일을하려고합니다. pk가 없다면 문제가되지 않아야합니다. 단, 진술 문이 올바른 곳인 &에 조인하는 것이 좋습니다.

는 오라클에서 유효한 구문은 영업 이익의

UPDATE u 
    SET u.COL1 = 'VALUE' 
    FROM Table1 AS u 
    INNER JOIN Table2 AS b ON u.name = b.name 
    INNER JOIN Table3 AS c ON c.ccol = b.ccol 
WHERE b.col1 = 'anyvalue' AND u.col2 = 'anothervalue' 
+1

당신은 업데이트 할 수 없습니다 ... 오라클의 JOIN ... :) – podiluska

+0

아, 고마워요! :), 지금 나는 잘 알고있다. 나는 그의 구문이 약간 이상하다는 것을 알았고, 대답 할 때 나는 찌를 수 있다고 생각했다. –