Outer join kullanırken dikkat edilmesi gereken basit ancak fazla bilinmediğini düşündüğüm bir nokta var.
Bir SELECT cümlesinde outer join kullanıldığında, kullanılan tablo üzerinde başka where conditionları varsa sorgu outer join yokmuş gibi çalışıyor.
Bu nedenle aynı tablo üzerindeki kolonlarla ilgili diğer where conditionlarına da outer join(+) eklenmesi gerekiyor.
Aşağıdaki script incelenirse konu daha iyi anlaşılacaktır diye düşünüyorum.
- SQL doğru data getiren ekstra condition olmayan outer join örneği
- SQL yanlış data getiren outer join örneği
- SQL doğru data getiren 2. SQL deki eksikliğin giderildiği outer join örneği
DROP TABLE OUTER_DENEME
/
DROP TABLE OUTER_DENEME2
/
CREATE TABLE OUTER_DENEME(NO NUMBER,AD VARCHAR2(10))
/
CREATE TABLE OUTER_DENEME2(NO NUMBER,AD VARCHAR2(10))
/
BEGIN
INSERT INTO OUTER_DENEME VALUES (1,’ERSIN’);
INSERT INTO OUTER_DENEME VALUES (2,’SELAMİ’);
INSERT INTO OUTER_DENEME VALUES (3,’VELİ’);
INSERT INTO OUTER_DENEME2 VALUES (1,’ERSIN’);
INSERT INTO OUTER_DENEME2 VALUES (2,’SELAMİ’);
COMMIT;
END;
/
SELECT * FROM OUTER_DENEME A, OUTER_DENEME2 B
WHERE A.NO=B.NO (+)
/
SELECT * FROM OUTER_DENEME A, OUTER_DENEME2 B
WHERE A.NO=B.NO (+)
AND B.AD IS NOT NULL
/
SELECT * FROM OUTER_DENEME A, OUTER_DENEME2 B
WHERE A.NO=B.NO (+)
AND B.AD (+) IS NOT NULL
/
Ersin selam,
Farklı bir ornek ile desteklemek istedim – http://optimaldba.blogspot.com/2007/08/outer-joins-nulls-and-filters.html
Umarim biraz daha zaman bulursun blog icin
Tonguc