2011-09-17 24 views
16

Kendini birleştirme ile sqlite içinde basit bir sorgu yazmaya çalışıyorum. Aynı maliyete sahip ürünlerin tüm ID çiftlerini istiyorum, ancak benzersiz çiftler istiyorum (yani aynı çifti farklı düzende iki kez listelemeyin). İşte bu var:Kendiliğinden birleştirme içinde benzersiz çiftleri seçin

I:

SELECT b1.Id, b2.Id 
FROM Basic AS b1 
LEFT JOIN Basic AS b2 
ON b1.cost = b2.cost 
WHERE b1.Id != b2.Id 
AND b1.Cost = 5; 

yüzden ben DISTINCT ve GROUP BY farklı kombinasyonlarını ama yine de elde dupicate çiftleri denedim

23 | 101 
23 | 205 
24 | 103 
101 | 23 <-- Duplicate! 

gibi bir şey olsun ... DISTINCT bp1.Id, bp2.Id SEÇ

gibi çalıştı şeyler ziyaretinde

& ... = 5 GROUP BY bp1.Id, bp2.Id;

Yinelenen çiftlerden nasıl kurtulabilirim? Herhangi bir fikir?

Yardımlarınız için minnettar olacağım! WHERE yan tümcesinde < için

cevap

36

Değişim != düşük kimliği her zaman önce gelir sağlamak için:

WHERE b1.Id < b2.Id 
+0

kriterlerini karşılayan kimlikleri 1'den fazla set yoksa, bu işe yaramaz. –