MySQL में क्रॉस जॉइन (कार्टेशियन प्रोडक्ट) का उपयोग करके मान संयोजन जनरेट करना
एक टेबल के कॉलम मानों के सभी संभावित संयोजन (कार्टेशियन प्रोडक्ट) जनरेट करने के लिए, उसी टेबल को कई बार जॉइन करें (सेल्फ जॉइन) या एकाधिक टेबल रेफरेंस का उपयोग करें।
उदाहरण के साथ पूर्ण कार्यान्वयन
टेबल बनाना
mysql> CREATE TABLE DemoTable622 (
Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
Value1 INT,
Value2 INT
);
रिकॉर्ड डालना
mysql> INSERT INTO DemoTable622(Value1, Value2) VALUES(1000, 1000), (2000, 3000);
सभी रिकॉर्ड देखना
mysql> SELECT * FROM DemoTable622;
आउटपुट:
+----+--------+--------+
| Id | Value1 | Value2 |
+----+--------+--------+
| 1 | 1000 | 1000 |
| 2 | 2000 | 3000 |
+----+--------+--------+
2 rows in set (0.00 sec)
सभी संयोजन जनरेट करने के लिए क्वेरी
mysql> SELECT tbl1.Id, tbl2.Value1, tbl3.Value2
FROM DemoTable622 tbl1, DemoTable622 tbl2, DemoTable622 tbl3;
आउटपुट:
+----+--------+--------+
| Id | Value1 | Value2 |
+----+--------+--------+
| 1 | 1000 | 1000 |
| 2 | 1000 | 1000 |
| 1 | 2000 | 1000 |
| 2 | 2000 | 1000 |
| 1 | 1000 | 3000 |
| 2 | 1000 | 3000 |
| 1 | 2000 | 3000 |
| 2 | 2000 | 3000 |
+----+--------+--------+
8 rows in set (0.01 sec)
व्याख्या:
- 2 पंक्तियाँ × 2 पंक्तियाँ × 2 पंक्तियाँ = 8 संयोजन (कार्टेशियन प्रोडक्ट)
tbl1,tbl2,tbl3एक ही टेबल के तीन एलियास हैं- कोई JOIN शर्त नहीं = क्रॉस जॉइन
स्पष्ट CROSS JOIN वाक्यविन्यास (अनुशंसित)
SELECT t1.Id, t2.Value1, t3.Value2
FROM DemoTable622 t1
CROSS JOIN DemoTable622 t2
CROSS JOIN DemoTable622 t3;
विशिष्ट संयोजन के लिए: विभिन्न कॉलम से
-- प्रत्येक Value1 के साथ प्रत्येक Value2 का संयोजन
SELECT t1.Value1, t2.Value2
FROM DemoTable622 t1
CROSS JOIN DemoTable622 t2;
आउटपुट: 4 पंक्तियाँ (2 × 2)
उपयोग के मामले
- टेस्ट डेटा जनरेशन
- संभावित संयोजनों की मैट्रिक्स बनाना
- रिपोर्टिंग के लिए प्लेसहोल्डर पंक्तियाँ
- पैरामीटर ग्रिड खोज
⚠️ चेतावनी
बड़े टेबल पर कार्टेशियन प्रोडक्ट तेजी से बढ़ता है (n×m×p...)। 1000 पंक्तियों वाली टेबल पर 3-वे क्रॉस जॉइन = 1 बिलियन पंक्तियाँ! हमेशा WHERE क्लॉज या LIMIT के साथ सीमित करें।
सीमित संयोजन
SELECT t1.Value1, t2.Value2
FROM DemoTable622 t1
CROSS JOIN DemoTable622 t2
LIMIT 10;