*Oracle ORA-00918: 모호한 열 정의 – SELECT 쿼리 문제**
Oracle에서 여러 조인된 테이블에 대해 SELECT *
쿼리를 실행하면 "모호한 열 정의"라는 무서운 ORA-00918 오류가 발생할 수 있습니다. 이는 쿼리에 다른 테이블의 동일한 이름을 가진 열이 포함된 경우에 발생합니다. Oracle은 검색하려는 열을 결정할 수 없습니다.
다음은 이 오류를 자주 발생시키는 쿼리 예시입니다.
<code class="language-sql">SELECT * FROM (SELECT DISTINCT(coaches.id), people.*, users.*, coaches.* FROM "COACHES" INNER JOIN people ON people.id = coaches.person_id INNER JOIN users ON coaches.person_id = users.person_id LEFT OUTER JOIN organizations_users ON organizations_users.user_id = users.id ) WHERE rownum <= 25</code>
문제의 근원
SELECT *
은 모든 열을 검색하려고 시도하지만 id
이 여러 테이블(coaches
, people
, users
)에 존재하므로 Oracle은 어떤 id
열을 선택할지 확신할 수 없습니다.
해결책: 정확한 컬럼 사양
ORA-00918을 수정하려면 SELECT *
을 피하세요. 대신 필요한 열을 명시적으로 나열하세요. 이를 달성하는 두 가지 주요 방법이 있습니다:
1. 컬럼 직접 선택
정규화된 이름(table.column)을 사용하여 각 열을 지정합니다.
<code class="language-sql">SELECT coaches.id, people.name, users.username, coaches.team FROM (SELECT DISTINCT(coaches.id), people.*, users.*, coaches.* FROM "COACHES" INNER JOIN people ON people.id = coaches.person_id INNER JOIN users ON coaches.person_id = users.person_id LEFT OUTER JOIN organizations_users ON organizations_users.user_id = users.id ) WHERE rownum <= 25</code>
2. 열 별칭 활용
AS
키워드를 사용하여 동일한 이름을 가진 열에 고유한 별칭을 할당합니다.
<code class="language-sql">SELECT coaches.id AS coaches_id, people.name AS person_name, users.username AS user_username, coaches.team AS coaches_team FROM (SELECT DISTINCT(coaches.id), people.*, users.*, coaches.* FROM "COACHES" INNER JOIN people ON people.id = coaches.person_id INNER JOIN users ON coaches.person_id = users.person_id LEFT OUTER JOIN organizations_users ON organizations_users.user_id = users.id ) WHERE rownum <= 25</code>
두 방법 중 하나를 사용하면 Oracle에 명확한 지침을 제공하여 ORA-00918 오류를 해결하고 쿼리가 성공적으로 실행되도록 할 수 있습니다. 예제 열 이름을 실제 열 이름으로 바꾸는 것을 잊지 마세요.
위 내용은 Oracle의 ORA-00918: SELECT * 쿼리의 모호한 열 정의 오류를 해결하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!