2013-01-22 1 views
0

여기 내 쿼리입니다. v.location은 플로어 및 룸 정보, 즉 FL 2 RM 204가 포함 된 열입니다.이 값을 방과 바닥을 두 개의 별도 열로 나눈 mv_rooms 테이블과 비교해야합니다. . "유효하지 않은 식별자 %의" * -연결 조인 비교를 사용할 때 식별자가 올바르지 않음

ORA-00904 : : : "R" "룸"잘못된 식별자 00904. 00000 내가 쿼리를 실행하면

select v.location, v.customer_name, v.street_name 
from voip_validate v, mv_rooms r, mv_buildings b 
left outer join voip_validate 
on v.location = 'FL ' || r.floor || ' RM ' || r.room 
where 'FL ' || r.floor || ' RM ' || r.room is null 
and b.dps_number = r.dps_number; 

, 나는 오류 원인 :
액션 * : 라인에서 오류 : 4 열 : 47

+0

ANSI 조인 구문 스타일이 혼합되어 있습니다. 하나의 스타일을 사용하고 그것에 충실하십시오. – Wolf

답변

1

오라클 조인 구문과 ANSI가 혼합되어 있습니다.

select v.location, v.customer_name, v.street_name 
    from voip_validate v 
     left outer join mv_rooms r 
        on v.location = 'FL ' || r.floor || ' RM ' || r.room 
     left outer join mv_buildings b 
       on b.dps_number = r.dps_number 
where r.room is null 

또한 null이 될 수 없기 때문에 where 절이 완전히 잘못되었습니다.

where 'FL ' || r.floor || ' RM ' || r.room is null 

는 "V"에 일치하는 행이 없었다 행을 반환하고자했다?

+0

R에서 행과 일치하지 않는 V에서 행을 반환하려고합니다. –

+0

@GeoffDawdy 아 좋아, 그런 식으로 예제를 수정했습니다. 나는 r.room이 nullable 필드가 아니라고 가정했습니다. 그렇지 않다면'where r.room'을 null이 아닌 것으로 (예 : PK 컬럼 중 하나) columnms – DazzaL

+0

감사합니다. 다음은 내가 사용하고있는 코드이며, 대부분 내가 찾고있는 레코드를 반환한다고 생각합니다. v.location, v.customer_name, v.street_name을 선택하십시오. voip_validate의 왼쪽 외부 조인 mv_rooms r on v.location = 'FL'|| r.floor || 'RM'|| r.room 왼쪽 외부 조인 mv_dps_buildings b on b.dps_building_number = r.dps_building_number 여기서 r.room은 null 이며 r.floor는 null입니다. –

1

확실히 당신의 where 절, 당신이 바닥 필드와 NULL의 방 필드를 테스트하기 위해 필요로하는 이 아닌 전체 문자열에 문제가 있습니다 .

select v.location, v.customer_name, v.street_name 
from voip_validate v, mv_rooms r, mv_buildings b 
left outer join voip_validate 
on v.location = 'FL ' || r.floor || ' RM ' || r.room 
where (r.floor is null or r.room is null) 
and b.dps_number = r.dps_number; 

바닥 및/또는 방이 정수 데이터 유형입니다. 문자열로 변환하십시오.

+0

잘못된 식별자가 계속 표시됩니다. 내 r.floor 및 r.room 열이 VARCHAR2 (4 바이트) 및 VARCHAR2 (8 바이트) 유형이지만 내 v.locations가 VARCHAR2 (60 바이트) 일 수 있습니까? –

+0

방금 ​​다른 문제를 깨달았습니다. where 절은 floor 나 room이 null 인 레코드를 찾는 것이므로 연결 문자열을 처리 할 수 ​​없습니다. null이 아닌 null을 변경하려고 시도한 다음 오류를 제거 할 수있을 때까지 SQL의 일부를 생략 해보십시오. 그것은 문제에 집중해야합니다. –

+0

당신의 솔루션이 선택된 대답이 아니지만 당신이 제가 문제의 일부를 추적하는 것을 도왔다 고 믿습니다. 당신의 도움을 주셔서 감사합니다. –

관련 문제