2010-12-23 21 views
21

seçmek için nasıl i aynısından olmayan benzersiz satırlarıolmayan "benzersiz" Satırlar

+------+------+------+ 
| id | idA |infos | 
+----- +------+------+ 
| 0 | 201 | 1899 | 
| 1 | 205 | 1955 | 
| 2 | 207 | 1955 | 
| 3 | 201 | 1959 | 
+------+------+------+ 

Ben sütunda infos için tüm satırları getirme istiyorum getirme zorunda olan aşağıdaki tabloya sahip En az iki satırda idA değeri. Yukarıdaki tablo için sorgu

Çıktı olmalıdır

hiçbir başarı ile şu istekleri denedim
infos 
1899 
1959 

:

  • SELECT idA FROM XXX WHERE NOT EXISTS(SELECT * FROM XXX GROUP BY idA)
  • SELECT * FROM XXX a WHERE NOT EXISTS(SELECT * FROM XXX b WHERE a.RVT_ID=b.RVT_ID GROUP BY idA)
+1

Ne veritabanı kullandığınız ve bu veritabanının sürümünü kullanıyor musun? –

+0

[Sütun Değerinin Farklı Olmadığı Her Satır Nasıl Seçilir?] Olası bir kopyası (http://stackoverflow.com/questions/13146304/how-to-select-every-row-where-column-value-is-not- farklı) –

+0

MySQL'de çalışıyor, bu yüzden bu etiketi ekliyorum. OP'nin doğru SQL diyalekt/versiyona değişmesi için acaba acaba? – icedwater

cevap

35

bu deneyin:

SELECT T1.idA, T1.infos 
FROM XXX T1 
JOIN 
(
    SELECT idA 
    FROM XXX 
    GROUP BY idA 
    HAVING COUNT(*) >= 2 
) T2 
ON T1.idA = T2.idA 

Yayınladığınız veriler için sonucu: Aradığınız Ne

 
idaA infos 
201 1899 
201 1959 
+0

Sadece iyi çalışıyor! – AdrienG

1

Bu "İnfos" un tam olarak bir kez göründüğü tüm satırları vermeli (Teste MySQL d)

SELECT id, idA, count(infos) AS cnt 
FROM mytable 
GROUP BY infos 
HAVING cnt=1 

Veri

id ida  infos 
1 201  1955 
2 202  1978 
3 203  1978 
4 204  1956 
5 0 1980 

Sonucu böyle

id idA  cnt 
1 201  1 
4 204  1 
5 0 1 
+1

Bu, tüm veritabanlarında çalışmayacak, MySQL üzerinde olacak, ancak MSSQL Sunucusunda olmayacaktır (ikincisi, grupta olmayan toplanmış olmayan sütunlara seçime izin vermeyecektir) –

+0

Katılıyorum. Yanıtta MySQL belirtmek için düzenledim. Teşekkürler. –

31

şey çalışmalıdır:

SELECT idA, COUNT(*) FROM XXX GROUP BY idA HAVING COUNT(*) > 1 
4
SELECT id, idA, count(infos) AS cnt 
FROM mytable 
GROUP BY infos 
HAVING cnt>1 
1

Bu muhtemelen geçerli:

SELECT *, count(DISTINCT infos) FROM table GROUP BY idA HAVING COUNT(DISTINCT infos) > 1; 
+0

"En az iki satırda aynı idA değerine sahip olan sütun satırları için tüm satırları almak istiyorum." – FreeLightman