2010-04-08 48 views
6

Bir birinden bire çok sayıda birleşimin belirli bir koşulla eşleşmesi durumunda bir kaydı hariç tutan bir SQL sorgusunu nasıl yazarım? ÖrneğinBire bir veya daha fazla SQL'e dayanan kayıtlar hariç tut

:

Details 
ID  
1   
2   

Items 
DetailID Item 
1   A 
1   B 
2   B 
2   C 

nasıl Öğeler 'A' içermeyen detay kayıtları seçersiniz? Neden sadece INNER JOIN kullanmayan

cevap

5
SELECT * 
FROM details d 
WHERE NOT EXISTS ( 
    SELECT * 
    FROM items i 
    WHERE i.DetailID == d.ID 
    AND i.Item = 'A') 
0

gibi: systempuntoout çözümüne bağlı

SELECT details.* 
FROM details 
INNER JOIN items ON details.ID=items.DetailID AND items.Item<> 'A' 
+2

ürün tablosunda ikinci sırada dönecekti. OP, detailId = 1'i tamamen hariç tutmak ister. –

+0

OP'nin bunu istediği açık mı? Muhtemelen söylediğin gibi. – systempuntoout

2

bina:

SELECT details.* 
FROM details 
LEFT OUTER JOIN items ON details.ID=items.DetailID AND items.Item = 'A' 
WHERE items.DetailID IS NULL 
İlgili konular