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

बिना ऑपरेटर के एकाधिक एकल या संदर्भ के लिए डेटा पुनर्प्राप्त करें

निम्नलिखित पर विचार करें

mysql> select * from employee ;
+------+------+--------+
| id   | name | skills |
+------+------+--------+
|    1 | xyz  | 1,2,4  |
|    2 | abc  | 1,3    |
|    3 | lmn  | 1,2,3  |
+------+------+--------+
3 rows in set (0.00 sec)

mysql> select * from skillset ;
+------+----------+
| id   | skillset |
+------+----------+
|    1 | Python   |
|    2 | Java     |
|    3 | C        |
|    4 | PHP      |
+------+----------+
4 rows in set (0.00 sec)

यह संरचना आपके जैसी ही है और इस स्थिति में क्वेरी करने के लिए हम find_in_set का उपयोग कर सकते हैं लेकिन यह काफी अक्षम है, यहां कुछ उदाहरण दिए गए हैं

mysql> select e.id,
e.name, 
group_concat(s.skillset) as skillset 
from employee e join skillset s 
on find_in_set(s.id,e.skills) > 0 
where find_in_set(1,e.skills) > 0 
 group by e.id ;
+------+------+-----------------+
| id   | name | skillset        |
+------+------+-----------------+
|    1 | xyz  | Python,Java,PHP |
|    2 | abc  | C,Python        |
|    3 | lmn  | Java,Python,C   |
+------+------+-----------------+
3 rows in set (0.00 sec)

select e.id,
e.name, 
group_concat(s.skillset) as skillset 
from employee e 
join skillset s on find_in_set(s.id,e.skills) > 0 
where find_in_set(2,e.skills) > 0  group by e.id ;
+------+------+-----------------+
| id   | name | skillset        |
+------+------+-----------------+
|    1 | xyz  | Python,PHP,Java |
|    3 | lmn  | C,Java,Python   |
+------+------+-----------------+

अब एक उचित सामान्यीकरण जीवन को बहुत आसान बना देगा और इसमें निम्न संबद्धता तालिका होगी

mysql> select * from employee_skills; 
+------------+----------+
| idemployee | idskills |
+------------+----------+
|          1 |        1 |
|          1 |        2 |
|          1 |        3 |
|          2 |        1 |
|          2 |        3 |
|          3 |        1 |
|          3 |        2 |
|          3 |        3 |
+------------+----------+

अब इस मामले में क्वेरी करना अधिक कुशल होगा

mysql> select e.id,
e.name,
s.skillset from employee e 
join employee_skills es on es.idemployee = e.id 
join skillset s on s.id = es.idskills where s.id = 1 ;
+------+------+----------+
| id   | name | skillset |
+------+------+----------+
|    1 | xyz  | Python   |
|    2 | abc  | Python   |
|    3 | lmn  | Python   |
+------+------+----------+

अंतिम दृष्टिकोण का उपयोग करके अधिक जटिल गणना बहुत आसानी से की जा सकती है।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL कनेक्शन स्ट्रिंग में पूलिंग =गलत का क्या अर्थ है?

  2. एकाधिक तालिकाओं के साथ एकाधिक आंतरिक जुड़ता है

  3. बड़ी MySQL तालिका में डुप्लिकेट निकालें

  4. सक्रिय रिकॉर्ड का उपयोग करके वाईआई में डेटाबेस दृश्य को कॉल करना

  5. MySQL तालिका में 1 या 0 डालने के लिए HTML चेकबॉक्स का उपयोग करना