2016-03-29 15 views
0
Bu sorgu çalışır

İÇİNDE yerine DEĞİL JOIN kullanarak kayıtlarını ortadan kaldırın, ama ben "değil de" kullanmaktan kaçınmak çalışıyorum:Bunu için beklediğiniz gibi bir

: Bunu denedim

select * from subscribers ls join emailopens eo 
    on ls.subscriberid=eo.subscriberid 
    where ls.listid=1381 
    and opentime > 1458864000 
    and emailaddress not IN (select emailaddress from subscribers where listid=1384) 

select * from subscribers ls join emailopens eo 
    on ls.subscriberid=eo.subscriberid left join subscribers ls2 
    on ls.emailaddress=ls2.emailaddress 
    where ls.listid=1381 
    and opentime > 1458864000 
    and ls2.listid=1384 

Sorun, yalnızca aynı e-postaya sahip satırları yalnızca listid=1381 ve listid=1384'da döndürmesidir. Ben bir sol birleşim kullanıyorum bu yana where listid=1381 TÜM satırları döndürmek gerektiğini ve aynı e-postanın 1384 olduğu satırlarda veri olması gerektiğini düşündüm, ancak 1381 ve 1384 değil bir e-posta varsa, null gösterir ls2.* sütun.

cevap

1

ls2.listid ürününü WHERE ürününe eklemek LEFT JOIN saatinizi INNER JOIN etkin biçimde dönüştürür. ON yılında listid kısıtlamayı tutarak deneyin ve sonra, bir NOT IN etkisini üretmek için, kayıtlar için sorarak bu an-karşıtı katılmak yapmak nerede ls2.emailaddress IS NULL:

select * from subscribers ls join emailopens eo 
    on ls.subscriberid=eo.subscriberid left join subscribers ls2 
    on ls.emailaddress=ls2.emailaddress and ls2.listid = 1384 
    where ls.listid=1381 
    and opentime > 1458864000 
    and ls2.emailaddress is null 
İlgili konular