2014-04-09 3 views
-2

쿼리 중 하나에서 (+) 기호를 발견했습니다. 일부 연구 후에 왼쪽 외부 조인이라는 것을 알았습니다. 그러나이 쿼리를 이해할 수 없습니다. (+) 기호없이이 쿼리를 다시 작성하십시오. 그것에 대해 뭔가 이상한이 있지만 모든 당신의 도움이 ....에 대한+ 기호 사용 쿼리

select e.masterid from streamed_events e, masters_encode m where 
e.masterid = m.id (+) and 
COMPANY_ID_R = m.company_id(+) and 
m.id is NULL and m.company_id is NULL 

덕분에

+0

이것은 Oracle의 외부 조인 구문입니다. Oracle 9i 이후 조인 구문이 변경되었습니다. – abhi

+0

오라클의 특정 조인 구문은 변경되지 않았습니다. (+) 구문 외에도 Oracle은 이제 ansi 조인 구문을 지원합니다. –

+0

@ RenéNyffenegger 포인트 주목. – abhi

답변

2

플러스 기호는 선택 테이블에서

select e.masterid 
from streamed_events e 
LEFT OUTER JOIN masters_encode m 
ON e.masterid = m.id and COMPANY_ID_R = m.company_id 
WHERE m.id is NULL and m.company_id is NULL 

Documentation

+0

'COMPANY_ID_R '이란 무엇입니까? 왜 당신은 그것을 조인의 일부로하기로 결정 했습니까? – abhi

+0

앨리어스가 없기 때문에 masters_encode 테이블에 존재하지 않는다고 가정하고 있으므로 "ambigous column"에 대한 문제는 없습니다 –

0
select e.masterid 
from streamed_events e 
left outer join masters_encode m on e.masterid = m.id and COMPANY_ID_R = m.company_id 
where m.id is NULL and m.company_id is NULL 

가입하세요 의미 질문. NULL이 m.idm.company_id 인 행이므로 masters_encode에 해당 행이없는 행이 streamed_events에 있는지 확인합니다. 이상한 부분은 변수 COMPANY_ID_R을 사용하여 m.company_id에 일치하지만 null 일 경우에만 선택하는 것입니다.

어쩌면 당신이 무엇을하려고하는지 설명 할 수 있다면 더 나은 대답을 줄 수 있습니다.

+0

streamed_events에 존재하지만 masters_encode에는 존재하지 않는 레코드를 선택하는 것은 제 추측입니다. – abhi

0
select e.masterid 
from streamed_events e 
left outer join masters_encode on e.masterid= m.id 
left outer join COMPANY on COMPANY_ID_R =m.company_id 
where m.id is NULL and m.company_id is NULL 
+0

개발할 수 있습니까? – Robin

+0

올바르지 않습니다. 원래 쿼리에는 '회사'라는 테이블이 없습니다. –