[SQL] ORA-00918 : 모호 SELECT 정의 컬럼 *
SQLORA-00918 : 모호 SELECT 정의 컬럼 *
모호하게 정의 된 열 :이 SQL을 실행 ORA-00918 얻기 :
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
모든 제안을 기쁘게?
해결법
-
==============================
1.쿼리의 투영 만 주어진 이름의 하나 개의 인스턴스를 가질 수 있습니다. 당신의 WHERE 절에서 볼 수 있듯이, 당신은 열라는 ID를 가진 여러 개의 테이블이있다. 당신이 * 선택되기 때문에 영사는 ID라는 여러 열이있을 것이다. 아니면 ORA-00918 던지기 컴파일러 아니 그것을했다 것입니다.
쿼리의 투영 만 주어진 이름의 하나 개의 인스턴스를 가질 수 있습니다. 당신의 WHERE 절에서 볼 수 있듯이, 당신은 열라는 ID를 가진 여러 개의 테이블이있다. 당신이 * 선택되기 때문에 영사는 ID라는 여러 열이있을 것이다. 아니면 ORA-00918 던지기 컴파일러 아니 그것을했다 것입니다.
이 솔루션은 매우 간단합니다 : 당신이 명시 적으로 명명 된 열을 선택하는 투사를 확장해야합니다. 그런 다음 중 단지 (말) COACHES.ID 또는 사용 열 별칭을 유지, 중복 된 열을 남길 수 있습니다 : coaches.id을 COACHES_ID한다.
아마도 그 많은 타이핑으로 파업을하지만 유일한 방법입니다. 그것이 어떤 편안함 경우 SELECT *는 생산 코드의 나쁜 관행으로 간주되어 명시 적으로 명명 된 열이 훨씬 안전하다.
-
==============================
2.당신은 오류가 외부 쿼리에서 발생하므로 여러 열, 내면의 쿼리에서 같은 일을 이름을 가지고있다. 당신이 외부 쿼리를 제거하면 여전히 혼동 될 수 있지만, 실행해야합니다 :
당신은 오류가 외부 쿼리에서 발생하므로 여러 열, 내면의 쿼리에서 같은 일을 이름을 가지고있다. 당신이 외부 쿼리를 제거하면 여전히 혼동 될 수 있지만, 실행해야합니다 :
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
그것은 당신이 대신 어쨌든 그들 모두를 선택하는 각 테이블에서 필요한 필드를 정확하게 지정 훨씬 더 (가독성과 성능 모두)가 될 것입니다. 당신이 정말로 다른 테이블에서 같은 일이라는 두 개의 필드가 필요하면 다음 사용 열 별칭 그들을 구별한다.
-
==============================
3.해당 열이 null이 될 수있는 노동 조합에 대한 선택하는 경우이 오류를 볼 수 있습니다.
해당 열이 null이 될 수있는 노동 조합에 대한 선택하는 경우이 오류를 볼 수 있습니다.
select * from (select D.dept_no, D.nullable_comment from dept D union select R.dept_no, NULL from redundant_dept R )
이것은 분명히 파서 혼란, 해결책은 항상 널 (null) 컬럼에 열 별칭을 할당하는 것입니다.
select * from (select D.dept_no, D.comment from dept D union select R.dept_no, NULL "nullable_comment" from redundant_dept R )
별명은 해당 컬럼과 동일하지 않지만, 아마 좋은 연습 그래서 결과에 열 머리글은 조합원 중에서 첫 번째 쿼리에 의해 구동된다.
from https://stackoverflow.com/questions/6233086/ora-00918-column-ambiguously-defined-in-select by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] "EEE MMM은 HH를 위해 dd : MM : SS의 ZZZ 일"로 날짜 형식 java.sql.Date (0) | 2020.03.23 |
---|---|
[SQL] 어떻게 별칭 오라클의 테이블에 '로'키워드를 사용 하는가? (0) | 2020.03.23 |
[SQL] MySQL의에서 "숫자 표 만들기" (0) | 2020.03.23 |
[SQL] SQL - 하나 개의 쿼리에서 여러 테이블에 삽입 (0) | 2020.03.23 |
[SQL] PostgreSQL을 / NodeJS와 결과의 배열로 테이블을 가입하세요 (0) | 2020.03.23 |