परिचय
जब एक टेबल में दो कॉलम होते हैं जो एक-दूसरे से संबंधित होते हैं (जैसे Value1 और Value2), और आप पारस्परिक संबंध (mutual relation) वाली पंक्तियों की गिनती करना चाहते हैं, तो सेल्फ-जॉइन (self-join) का उपयोग किया जा सकता है।
उदाहरण: टेबल बनाना और डेटा डालना
mysql> CREATE TABLE DemoTable1543 (
-> Value1 INT,
-> Value2 INT
-> );
Query OK, 0 rows affected (1.36 sec)
mysql> INSERT INTO DemoTable1543 VALUES(57, 60);
Query OK, 1 row affected (0.52 sec)
mysql> INSERT INTO DemoTable1543 VALUES(60, 68);
Query OK, 1 row affected (0.38 sec)
mysql> INSERT INTO DemoTable1543 VALUES(90, 98);
Query OK, 1 row affected (0.36 sec)
mysql> INSERT INTO DemoTable1543 VALUES(98, 90);
Query OK, 1 row affected (0.20 sec)
सभी रिकॉर्ड देखना
mysql> SELECT * FROM DemoTable1543;
आउटपुट:
+--------+--------+
| Value1 | Value2 |
+--------+--------+
| 57 | 60 |
| 60 | 68 |
| 90 | 98 |
| 98 | 90 |
+--------+--------+
4 rows in set (0.00 sec)
पारस्परिक संबंध गिनने की क्वेरी
हम उन पंक्तियों को गिनेंगे जहां Value1=90 और Value2=90 का पारस्परिक संबंध है (यानी 90→98 और 98→90 दोनों मौजूद हैं):
mysql> SELECT COUNT(*) FROM DemoTable1543 tbl1
-> JOIN DemoTable1543 tbl2
-> ON tbl1.Value2 = tbl2.Value1
-> WHERE tbl1.Value1 = 90 AND tbl2.Value2 = 90;
परिणाम
+----------+
| COUNT(*) |
+----------+
| 1 |
+----------+
1 row in set (0.00 sec)
व्याख्या
tbl1औरtbl2एक ही टेबल के दो उपनाम (aliases) हैंON tbl1.Value2 = tbl2.Value1- tbl1 का Value2, tbl2 के Value1 से मेल खाता हैWHERE tbl1.Value1 = 90 AND tbl2.Value2 = 90- दोनों दिशाओं में 90 की उपस्थिति सुनिश्चित करता हैCOUNT(*)- मेल खाने वाली पंक्तियों की गिनती करता है
उपयोग के मामले
- सोशल नेटवर्क में पारस्परिक मित्रता (A follows B और B follows A)
- द्विदिश संबंधों का विश्लेषण
- ग्राफ डेटा में चक्र पहचान
सेल्फ-जॉइन MySQL में पारस्परिक संबंधों का विश्लेषण करने का एक शक्तिशाली तरीका है।