itsource

행 제한 절을 사용하여 Oracle 쿼리에서 열 복제

mycopycode 2023. 7. 21. 21:35
반응형

행 제한 절을 사용하여 Oracle 쿼리에서 열 복제

Oracle 12c 이후 SQL 표준 행 제한 조항을 다음과 같이 사용할 수 있게 되었습니다.

SELECT * FROM t FETCH FIRST 10 ROWS ONLY

Oracle 12.1에서는 테이블을 결합할 때 매우 성가신 제한이 있었습니다.동일한 이름의 두 열을 사용할 수 없습니다.SELECT행 제한 절을 사용하는 경우 절입니다.예: Oracle 12.1에서 ORA-00918이 향상되었습니다.

SELECT t.id, u.id FROM t, u FETCH FIRST 10 ROWS ONLY

이 제한 사항은 모든 버전 12.1, 12.2, 18.0에 대한 설명서에 나와 있습니다.

enter image description here

해결 방법은 분명히 열에 별칭을 붙이는 것입니다.

SELECT t.id AS t_id, u.id AS u_id FROM t, u FETCH FIRST 10 ROWS ONLY

또는 다음을 사용하여 "클래식" 페이지로 이동합니다.ROWNUM또는 창 기능.

그런데 이상하게도, 원래 질문은 애매모호합니다.ID열은 Oracle 12.2 이상에서 정상적으로 실행됩니다.문서 버그입니까, 아니면 문서화되지 않은 기능입니까?

이 경우 행 제한 조항을 사용할 때 Oracle이 내부적으로 다음을 호출하는 것처럼 보입니다.ROW_NUMBER()열 이름을 사용하는 함수OVER절 좋아요ROW_NUMBER OVER(ORDER BY ID)이것 때문에 당신은 그것을 받고 있습니다.ORA-00918 error.

당신이 암묵적인 가입을 하고 있다는 것을 알았습니다.명시적으로 가입할 때 문제가 해결되는지 확인하는 것은 흥미로울 것입니다.Oracle이 id=id를 기반으로 조인을 수행하고 있으며 할당한 테이블 별칭을 사용하지 않는지 궁금합니다.

열 별칭으로 문제를 해결할 수도 있습니다.명시적으로 참여해 보십시오. 그러면 Oracle이 테이블 별칭을 사용하여 표시되는 모호성을 해결할 수 있습니다.

언급URL : https://stackoverflow.com/questions/51768880/duplicate-columns-in-oracle-query-using-row-limiting-clause

반응형