2010-12-23 14 views
21

चयन करने के लिए कैसे मैं निम्न तालिका, जिसमें से मैं गैर अनन्य पंक्तियांगैर "अद्वितीय" पंक्तियों

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

मैं स्तंभ infos के लिए सभी पंक्तियों लाने चाहते हैं, एक ही है कि लाने के लिए होता है कम से कम दो पंक्तियों में idA मूल्य। उपरोक्त तालिका के लिए क्वेरी का

आउटपुट होना चाहिए

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

क्या डेटाबेस का उपयोग कर रहे हैं, और उस डेटाबेस का कौन सा संस्करण आप उपयोग कर रहे? –

+0

संभावित डुप्लिकेट [प्रत्येक पंक्ति का चयन कैसे करें जहां कॉलम वैल्यू अलग नहीं है] (http://stackoverflow.com/questions/13146304/how-to-select-every-row-where-column-value-is-not- विशिष्ट) –

+0

यह MySQL में काम करता है, इसलिए मैं वह टैग जोड़ रहा हूं। मुझे आश्चर्य है कि क्या ओपी इसे सही एसक्यूएल बोली/संस्करण में बदलने के लिए है? – icedwater

उत्तर

35

इस प्रयास करें:

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 

डेटा आप पोस्ट के लिए परिणाम:

 
idaA infos 
201 1899 
201 1959 
+0

यह ठीक काम करता है! – AdrienG

1

यह उन सभी पंक्तियों को देना चाहिए जहां "इंफोस" बिल्कुल एक बार दिखाई देता है (टेस्ट MySQL पर घ)

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

डाटा

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

परिणाम

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

यह सभी डेटाबेस पर काम नहीं करेगा, यह MySQL पर होगा, लेकिन एमएसएसक्यूएल सर्वर पर नहीं होगा (बाद वाले समूह में गैर-समेकित कॉलम को अनुमति नहीं देगा जो कि चयनित में समूह में नहीं हैं) –

+0

मैं सहमत हूं। मैंने जवाब में MySQL निर्दिष्ट करने के लिए संपादित किया। धन्यवाद। –

31

कुछ इस तरह काम करना चाहिए:

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

यह शायद है कि आप क्या ढूंढ रहे हैं:

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

यह मेल नहीं खाता "मैं स्तंभ पंक्तियों के लिए सभी पंक्तियां प्राप्त करना चाहता हूं, जिनमें कम से कम दो पंक्तियों में एक ही आईडीए मान है।" – FreeLightman

संबंधित मुद्दे