Informix에서 Oracle로 여러 테이블을 포함하는 왼쪽 외부 조인 다시 쓰기
다음 Informix 쿼리와 동일한 Oracle 쿼리를 작성하려면 어떻게 해야 합니까?
select tab1.a,tab2.b,tab3.c,tab4.d
from table1 tab1,
table2 tab2 OUTER (table3 tab3,table4 tab4,table5 tab5)
where tab3.xya = tab4.xya
AND tab4.ss = tab1.ss
AND tab3.dd = tab5.dd
AND tab1.fg = tab2.fg
AND tab4.kk = tab5.kk
AND tab3.desc = "XYZ"
노력했습니다.
select tab1.a,tab2.b,tab3.c,tab4.d
from table1 tab1,
table2 tab2 LEFT OUTER JOIN (table3 tab3,table4 tab4,table5 tab5)
where tab3.xya = tab4.xya
AND tab4.ss = tab1.ss
AND tab3.dd = tab5.dd
AND tab1.fg = tab2.fg
AND tab4.kk = tab5.kk
AND tab3.desc = "XYZ"
정확한 구문은 무엇입니까?
다음과 같이 조인당 하나의 테이블을 작성합니다.
select tab1.a,tab2.b,tab3.c,tab4.d
from
table1 tab1
inner join table2 tab2 on tab2.fg = tab1.fg
left join table3 tab3 on tab3.xxx = tab1.xxx and tab3.desc = "XYZ"
left join table4 tab4 on tab4.xya = tab3.xya and tab4.ss = tab3.ss
left join table5 tab5 on tab5.dd = tab3.dd and tab5.kk = tab4.kk
제 쿼리에는 실제 왼쪽 조인이 포함되어 있지만 쿼리에는 포함되어 있지 않습니다.조건이 거기에 있기 때문에 쿼리는 내부 조인처럼 행동해야 합니다. (Informix를 모른다는 것은 인정하지만, 틀렸을 수도 있습니다.)
질문에 사용된 특정 Informix 확장자는 왼쪽 조인과 관련하여 약간 다르게 작동합니다.조인 자체의 정확한 구문과는 별개로, Informix에서는 외부 조인 테이블 목록을 지정할 수 있습니다.이들은 외부 결합된 상태로 남게 되며, 결합 조건은 where 절에 넣을 수 있습니다.SQL에 대한 특정 확장입니다.Informix는 'normal' left join도 지원하지만, 하나의 쿼리로 둘을 결합할 수는 없는 것 같습니다.
Oracle에서는 이 확장자가 존재하지 않으며 where 절에 외부 조인 조건을 넣을 수 없습니다. 조건은 상관없이 실행되기 때문입니다.
조건을 where 절로 이동하면 어떻게 되는지 살펴봅니다.
select tab1.a,tab2.b,tab3.c,tab4.d
from
table1 tab1
inner join table2 tab2 on tab2.fg = tab1.fg
left join table3 tab3 on tab3.xxx = tab1.xxx
left join table4 tab4 on tab4.xya = tab3.xya
left join table5 tab5 on tab5.dd = tab3.dd and tab5.kk = tab4.kk
where
tab3.desc = "XYZ" and
tab4.ss = tab3.ss
이제 두 조건이 맞는 행만 반환됩니다.행을 찾을 수 없는 경우에는 참일 수 없습니다. 따라서 표 3 및/또는 표 4에 일치하는 행이 없는 경우 또는ss
둘 중 하나에서 null이고, 이 조건 중 하나가 false를 반환하며, 행이 반환되지 않습니다.이렇게 하면 외부 조인이 내부 조인으로 효과적으로 변경되어 동작이 크게 변경됩니다.
PS:left join
그리고.left outer join
같습니다.즉, 선택적으로 두 번째 테이블을 첫 번째 테이블(왼쪽 테이블)에 결합합니다.조인의 '왼쪽' 부분에 데이터만 있는 경우 행이 반환됩니다.Oracle에서는 다음과 같은 작업을 수행할 수 있습니다.right [outer] join
왼쪽이 아니라 오른쪽 테이블을 선두 테이블로 만드는 것입니다.그리고 심지어는full [outer] join
표에 데이터가 있는 경우 행을 반환합니다.
내 생각엔 당신이 원하는 것은
SELECT tab1.a, tab2.b, tab3.c, tab4.d
FROM table1 tab1
JOIN table2 tab2 ON (tab1.fg = tab2.fg)
LEFT OUTER JOIN table4 tab4 ON (tab1.ss = tab4.ss)
LEFT OUTER JOIN table3 tab3 ON (tab4.xya = tab3.xya and tab3.desc = 'XYZ')
LEFT OUTER JOIN table5 tab5 on (tab4.kk = tab5.kk AND
tab3.dd = tab5.dd)
언급URL : https://stackoverflow.com/questions/7182059/rewrite-left-outer-join-involving-multiple-tables-from-informix-to-oracle
'programing' 카테고리의 다른 글
Gradle 5 JUNit BOM 및 Spring Boot 잘못된 버전 (0) | 2023.09.09 |
---|---|
플로팅 요소의 중심을 어떻게 맞추나요? (0) | 2023.09.09 |
Twitter 부트스트랩 텍스트 상자 글로우 및 섀도 재정의 (0) | 2023.09.09 |
What does the smiley face ":)" mean in CSS? (0) | 2023.09.09 |
다중 태그 도커 이미지 만들기 (0) | 2023.09.09 |