Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

mysql माता-पिता के संबंध में बाल पंक्तियों की कुल संख्या कैसे प्राप्त करें?

मान लें कि आपकी तालिका है:

mysql> SELECT * FROM Employee;
    +-----+------+-------------+------+
    | SSN | Name | Designation | MSSN |
    +-----+------+-------------+------+
    | 1   | A    | OWNER       | 1    |
    | 10  | G    | WORKER      | 5    |
    | 11  | D    | WORKER      | 5    |
    | 12  | E    | WORKER      | 5    |
    | 2   | B    | BOSS        | 1    |
    | 3   | F    | BOSS        | 1    |
    | 4   | C    | BOSS        | 2    |
    | 5   | H    | BOSS        | 2    |
    | 6   | L    | WORKER      | 2    |
    | 7   | I    | BOSS        | 2    |
    | 8   | K    | WORKER      | 3    |
    | 9   | J    | WORKER      | 7    |
    +-----+------+-------------+------+
    12 rows in set (0.00 sec)

क्वेरी है :

SELECT  SUPERVISOR.name AS SuperVisor, 
        GROUP_CONCAT(SUPERVISEE.name  ORDER BY SUPERVISEE.name ) AS SuperVisee, 
        COUNT(*)  
FROM Employee AS SUPERVISOR 
  INNER JOIN Employee SUPERVISEE ON  SUPERVISOR.SSN = SUPERVISEE.MSSN 
GROUP BY SuperVisor;

क्वेरी इस तरह परिणाम देगी:

    +------------+------------+----------+
    | SuperVisor | SuperVisee | COUNT(*) |
    +------------+------------+----------+
    | A          | A,B,F      |        3 |
    | B          | C,H,I,L    |        4 |
    | F          | K          |        1 |
    | H          | D,E,G      |        3 |
    | I          | J          |        1 |
    +------------+------------+----------+
    5 rows in set (0.00 sec)

[उत्तर ]:यह एक स्तर (तत्काल पर्यवेक्षण) के लिए सभी संभावित स्तर पर सभी पर्यवेक्षणों को खोजने के लिए आपको लूप के दौरान उपयोग करना होगा (संग्रहीत प्रक्रियाओं का उपयोग करें)।

यद्यपि प्रत्येक स्तर पर कर्मचारियों को पुनः प्राप्त करना और फिर उनका यूनियन लेना संभव है, हम सामान्य तौर पर, लूपिंग तंत्र का उपयोग किए बिना "सभी स्तरों पर एक कर्मचारी के पर्यवेक्षकों को पुनः प्राप्त करें" जैसी क्वेरी निर्दिष्ट नहीं कर सकते।> "

संदर्भ :इस स्लाइड में स्लाइड नंबर 23 पढ़ें। पुस्तक "फंडामेंटल्स ऑफ फोर्थ एडिशन डेटाबेस सिस्टम्स" अध्याय "द रिलेशनल अलजेब्रा एंड रिलेशनल कैलकुलस" में "रिकर्सिव क्लोजर ऑपरेशंस" विषय है।

तालिका निर्माण के लिए क्वेरी जोड़ना, आपके लिए उपयोगी हो सकता है:

mysql> CREATE TABLE IF NOT EXISTS `Employee` (
    ->   `SSN` varchar(64) NOT NULL,
    ->   `Name` varchar(64) DEFAULT NULL,
    ->   `Designation` varchar(128) NOT NULL,
    ->   `MSSN` varchar(64) NOT NULL, 
    ->   PRIMARY KEY (`SSN`),
    ->   CONSTRAINT `FK_Manager_Employee`  FOREIGN KEY (`MSSN`) REFERENCES Employee(SSN)
    -> ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Query OK, 0 rows affected (0.17 sec)

आप तालिका की जांच कर सकते हैं जैसे:

mysql> DESCRIBE Employee;
+-------------+--------------+------+-----+---------+-------+
| Field       | Type         | Null | Key | Default | Extra |
+-------------+--------------+------+-----+---------+-------+
| SSN         | varchar(64)  | NO   | PRI | NULL    |       |
| Name        | varchar(64)  | YES  |     | NULL    |       |
| Designation | varchar(128) | NO   |     | NULL    |       |
| MSSN        | varchar(64)  | NO   | MUL | NULL    |       |
+-------------+--------------+------+-----+---------+-------+
4 rows in set (0.00 sec)  


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. सेट नाम के बिना पीडीओ के साथ संयोजन कैसे निर्दिष्ट करें?

  2. MySQL जोड़ने से पूरी क्वेरी धीमी हो जाती है

  3. SQL DELETE सिंटैक्स - DBMS द्वारा सूचीबद्ध

  4. Mysql के साथ अंतिम डाली गई आईडी पुनर्प्राप्त करें

  5. कोडनिर्देशक में तीन तालिकाओं में कैसे शामिल हों?