2013-02-26 273 views
10

से मेल खाने वाले कॉलम के साथ पंक्तियों का चयन करें मैं काफी निश्चित हूं कि यह कुछ आसान है, लेकिन मैंने जो भी उदाहरण आजमाया है वह असफल रहा है। मैं इसएसक्यूएल सर्वर

ID Part_Type Station_Type 
--- --------- ------------ 
1 5   234 
2 5   846 
3 5   234 
4 6   585 
5 6   585 
6 7   465 

की तरह एक तालिका क्वेरी और पंक्तियों 1 और 3 वापसी, साथ ही 4 और 5 है यही कारण है, मैं चाहता हूँ पंक्तियों को वापस करने के लिए करना चाहते हैं, जहां उनके कॉलम मैच के दो। यह इस प्रश्न के समान है: SO Question लेकिन केवल एक टेबल पर किया जाना चाहिए। उस क्वेरी को प्रत्येक पंक्ति के लिए एक मैच मिलेगा, लेकिन मुझे केवल उन पंक्तियों को चाहिए जो दो कॉलम में मेल खाने वाले मान हैं। मैं इसे कैसे ढूंढूं?

धन्यवाद

+0

क्या करना चाहिए हा यदि तीन पंक्तियों में सभी पंक्तियों का एक ही भाग_Type और Station_Type है तो पेंशन करें? – hatchet

+0

इसे तीनों को वापस करना चाहिए। असल में मैं उन पंक्तियों के "समूह" को वापस लौटाना चाहता हूं जिनमें प्रत्येक के पास मेल खाने वाले कॉलम हैं। – user912447

उत्तर

14

आप निम्न का उपयोग कर सकते हैं:

select t1.id, t1.part_type, t1.station_type 
from yourtable t1 
where exists (select part_type, station_type 
       from yourtable t2 
       where t1.part_type = t2.part_type 
       and t1.station_type = t2.station_type 
       group by part_type, station_type 
       having count(id) > 1) 

देखें SQL Fiddle with Demo

+1

आवश्यकताओं के आधार पर मैं 'गिनती (आईडी) = 2' के साथ' गिनती (आईडी) = 2' के साथ प्रतिबिंबित करने का सुझाव दूंगा> 1' इन पंक्तियों के साथ कुछ: http://www.sqlfiddle.com/#!3/48af7/ 6 –

+1

@zespri आप शायद सही, अद्यतन हैं। धन्यवाद :) – Taryn

1

मुझे लगता है कि एक self-join आप के लिए काम करेंगे:

SELECT * FROM table t1 
INNER JOIN table t2 ON t1.Part_Type = t2.Part_Type 
    AND t1.Station_Type = t2.Station_Type 
    AND t1.Id <> t2.Id 
+2

आपको डुप्लिकेट से बचने के लिए कुछ चाहिए। जैसा कि लिखा गया है हर पंक्ति हमेशा मेल खाती है। – hatchet

+0

ओह, आप सही हैं, नहीं सोचते थे। मेरा जवाब अपडेट किया गया और आपका ऊपर उठाया गया। –

3
select id, part_type, station_type 
from myTable t1 
where exists (select 1 from myTable t2 
       where t1.part_type = t2.part_type 
        and t1.station_type = t2.station_type 
        and t1.id <> t2.id) 
+0

आपका दोनों ब्लूफेट का उत्तर काम करता है और एकमात्र कारण जिसे मैं स्वीकार कर रहा हूं वह "समूह द्वारा" के लिए है। यह जानकारी को पढ़ने में थोड़ा आसान बनाता है। – user912447