source

PL/SQL 다중 왼쪽 조인 사용

lovecheck 2023. 9. 9. 09:37
반응형

PL/SQL 다중 왼쪽 조인 사용

SELECT * FROM Table A LEFT JOIN TABLE B LEFT JOIN TABLE C

위의 토막글에서 TABLE C는 (TABLE B)에 왼쪽 조인을 할 것인가 아니면 (TABLE A LEFT JOUNT B의 데이터) 또는 (TABLE A)에 왼쪽 조인을 할 것인가요?

TABLE C는 1.(TABLE B) 또는 2.(TABLE A LEFT JOUNT B의 데이터) 또는 3.(TABLE A)에 왼쪽 조인?

두 번째.하지만 가입 조건은 당신이 좀 더 이해하는데 도움이 될 것입니다.

다음과 같이 쓸 수 있습니다.

SELECT * 
FROM Table A 
LEFT JOIN TABLE B ON (A.id = B.id)
LEFT JOIN TABLE C ON (A.ID = C.ID)

그러나 다음을 수행할 수 있습니다.

SELECT * 
FROM Table A 
LEFT JOIN TABLE B ON (A.id = B.id)
LEFT JOIN TABLE C ON (A.id = C.id and B.code = C.code)

따라서 이전 테이블에서 모든 필드에 조인할 수 있으며 이전 조인의 "결과"(엔진이 결과를 얻는 방법을 선택할 수도 있음)에 조인합니다.

왼쪽 조인에서 비상호 작업으로 간주(A left join B와 같지 않습니다.B left join A) 그래서 순서가 중요하고 C는 기존에 가입된 테이블에 그대로 가입될 것입니다.

Oracle 설명서는 조인 처리 방법에 대해 매우 구체적입니다.

세 개 이상의 테이블의 조인을 실행하기 위해 Oracle은 먼저 두 개의 테이블의 열을 비교하는 조인 조건을 기반으로 두 개의 테이블을 조인한 다음 조인된 테이블의 열을 포함하는 조인 조건을 기반으로 결과를 다른 테이블에 조인합니다.Oracle은 모든 테이블이 결과에 결합될 때까지 이 프로세스를 계속합니다.

이것은 조인을 처리하는 논리적 접근 방식이며 ANSI 표준과 일치합니다(즉, 모든 데이터베이스 엔진이 순서대로 조인을 처리합니다).

그러나 쿼리가 실제로 실행되면 Optimizer는 다른 순서로 조인을 실행하도록 선택할 수 있습니다.결과는 쿼리에 주어진 순서대로 조인을 처리하는 것과 논리적으로 동일해야 합니다.

또한 결합 조건으로 인해 예기치 못한 조건이 발생할 수 있습니다.그렇다면 다음과 같이 하십시오.

from A left outer join
     B
     on A.id = B.id left outer join
     C
     on B.id = C.id

그러면, 당신은 당신이 어떤 조건을 가질지도 모릅니다.A그리고.C각각 특정 ID를 가진 행이 있지만,B하지 않다.이 공식을 사용하면 행을 볼 수 없습니다.C왜냐하면 그것은 에 합류하고 있기 때문입니다.NULL. 그래서 조인 조건에 주의를 기울이시기 바랍니다.left outer join, 특히 체인의 첫 번째 테이블이 아닌 다른 테이블에 결합할 때.

쿼리를 실행하려면 열 이름을 제대로 언급해야 합니다.예를 들어 다음을 사용하고 있다고 가정합니다.

SELECT * 
FROM Table A 
LEFT JOIN TABLE B ON (A.id = B.id)
LEFT JOIN TABLE C ON (A.id = C.id and B.code = C.code)

그러면 다음 오류가 발생할 수 있습니다.

ORA-00933:SQL 명령이 제대로 종료되지 않았습니다.

이를 방지하기 위해 다음을 시도할 수 있습니다.

SELECT A.id as "Id_from_A", B.code as "Code_from_B"
FROM Table A 
LEFT JOIN TABLE B ON (A.id = B.id)
LEFT JOIN TABLE C ON (A.id = C.id and B.code = C.code)

감사해요.

언급URL : https://stackoverflow.com/questions/15872828/pl-sql-using-multiple-left-join

반응형