ORing kullanmak cuz
select distinct a.loc_id , a.loc_name
from Location a LEFT join Group b
on a.loc_id = b.loc_id
where (b.grp_id = 3 OR (b.group_id IS NULL))
Ama her konumun tamamına zaman olsun bu:
SELECT loc_id, loc_name
FROM Location l
WHERE EXISTS (SELECT *
FROM Group g
WHERE l.loc_id = g.loc_id AND
g.grp_id = 3)
UNION ALL
SELECT loc_id, loc_name
FROM Location
WHERE NOT EXISTS (SELECT *
FROM Location l
JOIN GROUP g ON l.loc_id = g.loc_id
WHERE g.grp_id = 3)
Location
kayıtları var eşleşmesi halinde Belirtilen Group
için, bu kayıtlar UNION ALL
işleminin ilk sorgusu tarafından döndürülür. İkinci sorgu bu durumda boş bir set döndürecektir.
ikinci sorgu tablosunun Location
ait tüm kayıtları döndürür oysa hiçbir eşleşen kayıtlar varsa, daha sonra ilk sorgu, boş bir dizi döndürür.
MS SQL Server ve Informix iki farklı üründür. Hangisini kullanıyorsun? – jarlh
@jarlh: 'informix'i kullanıyorum –
tabiki bütün yerleri elde edersiniz: ilk önce bu sola birleştir, sonra b.grp_id null ... neyi başarmak istersin? – Pras