2011-09-17 16 views
8

संभव डुप्लिकेट:एसक्यूएल: स्वयं केवल एक बार प्रत्येक पंक्तियों का उपयोग करके शामिल

A1 
A2 
A3 
B1 
B2 
C1 
C2 

कहाँ:
combinations (not permutations) from cross join in sql

मैं वर्तमान में निम्नलिखित रिकॉर्ड के साथ एक मेज मिल गया है वही पत्र सामान्य में कुछ मानदंडों को दर्शाता है (उदाहरण के लिए कॉलम 'अक्षर' के लिए एक सामान्य मूल्य)। मैं एक स्व के रूप में इस मापदंड के आधार पर संयोजन है:

SELECT mytable.*, self.* FROM mytable INNER JOIN mytable AS self 
    ON (mytable.letter = self.letter and mytable.number != self.number); 

इस में शामिल होने के निम्नलिखित की तरह कुछ देता है:

A1 A2 
A2 A1 
A1 A3 
A3 A1 
A2 A3 
A3 A2 
B1 B2 
B2 B1 
C1 C2 
C2 C1 

हालांकि, मैं केवल प्रत्येक जोड़ी एक बार एक संयोजन के बजाय क्रमपरिवर्तन की शामिल करने के लिए (चाहते हैं)।

A1 A2 
A1 A3 
A2 A3 
B1 B2 
C1 C2 
+0

ने उस उत्तर में 'स्वयं-शामिल' टैग जोड़ा है, यही मैंने खोजा है। – EoghanM

उत्तर

17

बदलने शामिल हों हालत थोड़ा प्राप्त होगा आप क्या चाहते हैं ..

बजाय::

ON (mytable.letter = self.letter and mytable.number != self.number) 

उपयोग

ON (mytable.letter = self.letter and mytable.number > self.number) 

यह मैं निम्नलिखित कैसे मिलेगा केवल संयोजन शामिल होंगे जहां self.number 012 से अधिक हैजो परिणामस्वरूप प्रत्येक संयोजन के एक वैध क्रम में परिणामों को प्रतिबंधित करता है ...