2016-04-05 26 views
1

ile veri eşleşmesine gerek yok Sağ sütunda bulunmayan Sol sütundaki değerleri döndürmem gerekiyor. Doğru sütuna sahip veri eşleşmesine gerek yok.yalnızca sağ sütunda bulunmayan sol sütundaki değerleri döndürür. Sağ sütunda

Aynı meta verilere sahip iki tablom var. Sol tablo 11137 kayıt, Sağ tablo - 9725. (FYI, Sol tablo 8508 benzersiz ID_pk ve Sağ tablo vardır - 7194 benzersiz ID_pk.) Sadece sağ satırda değil, tüm satırları sol tablodan dönmek gerekiyor.

Çeşitli eklemleri ve CTE'yi denedim, ancak sadece birleştirme için 94857 veya sol birleştirme için 96463 döndürdü.

Aynı zamanda NOT EXISTS kullanmayı denedim, ancak istenen sonucu almadım. Mantıksal bir hatam olabilir.

## GlobalTempTable_PW_2 PW itibaren NOT EXISTS NEREDE DEĞİL ## GlobalTempTable_PW_2 itibaren ( Seç ID_fk EXISTS ## GlobalTempTable_PW_2 PW (Seç PW.ID_fk itibaren Seç * Üyelik ## PW.ID_fk = LA üzerinde GlobalTempTable_LA_2 LA. ID_fk);

cevap

1

Bu görev genellikle NOT EXISTS kullanılarak gerçekleştirilir:

Select * 
From ##GlobalTempTable_PW_2 PW 
WHERE NOT EXISTS (SELECT 1 
        FROM ##GlobalTempTable_LA_2 LA 
        WHERE PW.ID_pk = LA.ID_fk) 

Bu sorgu tablodaki 01 eşleşen bir kayıt yok masanın ##GlobalTempTable_PW_2 tüm kayıtları döndürür.

+0

Çok teşekkürler. VARSAYILANLARI kullandım, ama mantığım yanlıştı. – enigma6205

1

ben böyle yapmak:

SELECT pw.* 
FROM ##GlobalTempTable_PW_2 pw 
LEFT JOIN ##GlobalTempTable_LA_2 la 
ON pw.ID_pk = la.ID_fk 
WHERE la.ID_fk IS NULL 

Bilginize: Eğer UNIQUE sütunlarla tablolar katılıyor Bu yaklaşımı, yalnızca kullanın. Aksi halde SOL JOIN bazı sonuçları indirebilir

+1

günümüzde ** NOT EXISTS ** çözümünü seçmek en iyisidir, biraz daha hızlıdır, gerçekten özel bir (Anti Semi Katılma) ile optimize edilmiştir – MtwStark

+0

@MtwStark her veritabanı motoru için doğru mu? (Oracle ve MySQL ile ilgilenen) – Dany

+1

Oracle, yıllardır bu optimizasyona sahiptir, [DEĞİŞTİR VEYA LEFT JOIN/IS NULL: Oracle] (https://explainextended.com/2009/09/17/not -in-vs-değil-exists-vs-sol-join-is-null-oracle /) – MtwStark