2012-05-11 2 views
1

AskTom 사이트를 살펴보면서 업데이트 구문에 대해 매우 강력한 도구가 있어야한다는 것을 알았지 만 내 구문은 하위 쿼리 다음에 별칭을 수락하지 않습니다. 누군가 나를 설명 해주고 해결책을 제시 할 수 있습니까?업데이트 (선택 시점) 명령문이 테이블 별칭을 인식하지 못하는 이유는 무엇입니까?

Update (SELECT T.Date_,T.Name_ 
     FROM TableA T, TableB P 
     WHERE P.Date_ = T.Date_ 
     AND P.Name_ = T.Name_) SET P.ID = T.Name_ 

이 유형의 업데이트를 실행하는 방법에 관해서는 다른 문제가있을 수 있으며 이는 보너스가 될 수 있습니다. 별칭 문제를 이해하려고 할 때이 시점에서 더 관심이 있습니다. 나는

TableB.ID = TableA.Name_ 

에서 하위에 시도했지만 운이

은 특히 오류가 ORA-00904 잘못된 식별자입니다.

언제나 감사드립니다.

위의 문제는 나를 위해 답변되었지만 이해하려고 노력할 때 다른 문제가 있습니다.

이제 ORA-01779 키가 아닌 보존 된 테이블에 매핑되는 열을 수정할 수 없습니다. 이것이 내가 업데이트하려고하는 테이블을 참조하고 있다고 가정합니까? 보기 나 pk 또는 fk가없는 다른 적절한 소스에서 업데이트 할 수 있습니다.

이 유형의 업데이트 문은 Oracle 임시 테이블과 함께 작동합니까? 아니면 문제가 발생할 수 있습니까?

TableA의 여러 열을 업데이트하기 위해 case 문과 함께이 유형의 명령문을 사용하거나 문제가있을 수 있습니까?

다시 한번 감사드립니다.

+0

는 "별칭을 받아들이기를 거부"무엇을 의미 하는가? 어떤 오류가 발생합니까? 'TableA'과'TableB' 둘 다'Date_'과'Name_' 열을 가지고 있습니까? –

+0

위의 특정 오류를 추가했는데 두 테이블에 올바른 cols가 있습니다. – dee

답변

5

UPDATE (query) 작업을 수행 할 때 괄호 밖에서 사용할 수있는 열은 쿼리에서 반환 한 열의 이름입니다.이 경우에는 Date_ 및 Name_입니다. 쿼리에서 사용한 테이블 별칭이 괄호 밖에서도 유효하지 않습니다. 이 때문에 필요한 것은

은 다음과 같습니다

Update (SELECT P.ID ,T.Name_ 
     FROM TableA T, TableB P 
     WHERE P.Date_ = T.Date_ 
     AND P.Name_ = T.Name_) SET ID = Name_ 
+0

Thanks Tony, TableB에서 ID를 업데이트하는 방법을 알고 싶습니다. TableA에도 ID 열이 있으면 어떻게됩니까? – dee

+0

그런 경우 하위 쿼리에서 다른 별칭을 지정해야합니다. '(t.id, p.id를 P_ID ...로 선택하십시오. ' –

+0

아아 이제 알겠습니다 ... 고마워요. 토니. – dee

관련 문제