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
'source' 카테고리의 다른 글
Chrome에서 인쇄할 때 href 값을 제거해야 함 (0) | 2023.09.09 |
---|---|
mpdf에서 css 파일을 추가하는 방법 (0) | 2023.09.09 |
요소의 올바른 오프셋을 구하는 방법은? - jQuery (0) | 2023.09.09 |
성공적으로 로그인한 후 스프링 부트가 현재 페이지로 리디렉션됨 (0) | 2023.09.09 |
시간대별 또는 10분 단위로 시간을 분류하려면 어떻게 해야 합니까? (0) | 2023.09.09 |