2016-11-08 2 views
-2

oracle sql 외부 조인을 검색하여 (예 : mysql에서 외부 조인을 수행 할 수 있다고 생각하는 * a = b와 같은) 샷 컷이 있는지 확인했습니다. 유망 해 보였지만 작동하지 않는 것을 발견했습니다. 내가 외부 조인 구문을 결코 기억할 수 없기 때문에 나는 지름길을 찾으려고 노력하고있다. 나는 항상 그것을 봐야한다. 예를 들면 다음과 같습니다.oracle sql에서 외부 조인

SELECT 
    l.*, 
    r.* 
FROM database.login l LEFT OUTER JOIN database.relation r 
    ON l.user_id = r.user_id 
     AND r.user_id IS NULL 

r.user_id의 여러 값이 예상대로 null입니다.

SELECT 
    l.*, 
    r.* 
FROM database.login l, database.relation r 
WHERE l.user_id = +r.user_id 

하지만이 USER_ID 일치 database.login이 없었 database.relation에서 행을 선택하지 않은 : 나는 어디 선가 읽은 것을 시도했다.

전체 구문을 입력해야합니까? 관계가 아닌 로그인으로 항목을 가져 오려고합니다.

나는 내가 좋아하는 뭔가를 사용할 수도있을 것 같군요 다음

u.user_id not in select user_id from database.relation 

경우 필요 당신이 이렇게 할 수

+2

첫 번째 쿼리에 정확히 무엇이 잘못 되었습니까? –

+0

제 생각에는 ANSI 조인 구문을 익히는 데 시간을 할애해야합니다. 정확히 어렵지는 않습니다 :'select * from some_table some_other_table '. 조인 조건과 함께 사용할 조인 유형을 알고 있어야합니다. – Boneist

답변

0

: 왼쪽 외부에 대한

select l.*, r.* 
from database.login l, database.relation r 
where l.user_id = r.user_id (+) 

가입 및

select l.*, r.* 
from database.login l, database.relation r 
where l.user_id (+) = r.user_id 
총칭

외부 조인

+4

오라클은 더 이상 ** (+) 연산자를 사용하지 않는 것이 좋습니다 **. –

+0

그러나 더 짧은 구문으로 외부 조인을 구현하는 방법입니다. 나는 항상 이것을 사용하고 있으며 문제가 발생하지 않았다. 조심스럽게 사용하면 괜찮습니다. – Nemanja91

+0

@ Nemanja91 당신은 명백하게'SELECT * FROM t1, t2, t3 WHERE t1.col1 = t2.col1 (+) AND t2.col2 (+) = t3.col1;'과 같은 조인을 시도하지 않았다. 'ORA-01417 : 테이블은 하나 이상의 다른 테이블에 외부 조인 될 수 있습니다. 'SELECT * FROM t1 LEFT OUTER JOIN t2 ON (t1.col1 = t2.col1) RIGHT OUTER JOIN t3 ON (t2.col2 = t3.col1);'잘 작동합니다! – Boneist