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

माई एसक्यूएल। सेल्फ जॉइन का उपयोग कैसे करें

तुम बहुत करीब हो!

चूंकि आप कहते हैं कि आप ए से देश और वर्ष प्रदर्शित कर रहे हैं और A. Country तुर्की, तुर्की, आप सब कुछ देखने जा रहे हैं। आपको या तो चयनों को B.country . होने के लिए बदलना होगा और B.year या जहां क्लॉज को बदलें B.country

यह एक क्रॉस जॉइन का उपयोग कर रहा है जो एक टेबल में जितने अधिक रिकॉर्ड होंगे, धीमा हो जाएगा।

SELECT DISTINCT b.Country, b.Year 
FROM table1 AS a, 
     table1 AS b 
WHERE a.Year=b.Year 
  and a.Country='Turkey';

के रूप में लिखा जा सकता है ... और संभवतः एक ही निष्पादन योजना होगी।

SELECT DISTINCT b.Country, b.Year 
FROM table1 AS a 
CROSS JOIN table1 AS b 
WHERE a.Year=b.Year 
  and a.Country='Turkey';

ORयह एक इनर जॉइन का उपयोग करता है जो उस कार्य को सीमित करता है जो इंजन को करना चाहिए और प्रदर्शन में गिरावट से ग्रस्त नहीं होता है जो एक क्रॉस जॉइन करेगा।

SELECT DISTINCT a.Country, a.Year 
FROM table1 AS a 
INNER JOIN table1 AS b 
   on a.Year=b.Year 
  and b.Country='Turkey';

क्यों:

विचार करें कि शामिल होने पर SQL इंजन क्या करेगाA B

+------------+------+--------+------------+------+--------+
| A.Country  | Rank |  Year  | B.Country  | Rank |  Year  |
+------------+------+--------+------------+------+--------+
|France      |  55  |  2000  |France      |  55  |  2000  |
+------------+------+--------+------------+------+--------+
|Canada      |  30  |  2000  |France      |  55  |  2000  |
+------------+------+--------+------------+------+--------+ 
|Turkey      |  78  |  2000  |France      |  55  |  2000  |
+------------+------+--------+------------+------+--------+ 
|France      |  55  |  2000  |Canada      |  30  |  2000  |
+------------+------+--------+------------+------+--------+
|Canada      |  30  |  2000  |Canada      |  30  |  2000  |
+------------+------+--------+------------+------+--------+ 
|Turkey      |  78  |  2000  |Canada      |  30  |  2000  |
+------------+------+--------+------------+------+--------+ 
|France      |  55  |  2000  |Turkey      |  78  |  2000  |
+------------+------+--------+------------+------+--------+
|Canada      |  30  |  2000  |Turkey      |  78  |  2000  |
+------------+------+--------+------------+------+--------+ 
|Turkey      |  78  |  2000  |Turkey      |  78  |  2000  |
+------------+------+--------+------------+------+--------+ 

तो जब आपने कहा कि A.Country प्रदर्शित करें और A.Year जहां A.Country तुर्की है, आप देख सकते हैं कि यह तुर्की है (केवल 1 रिकॉर्ड विशिष्ट होने के कारण)

लेकिन अगर आप B.Country करते हैं तुर्की है और प्रदर्शन A.Country , आपको फ़्रांस, कनाडा और तुर्की मिलेगा!



  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. डेटा डेटा लोड करें आसानी से YYYYMMDD को YYYY-MM-DD में कनवर्ट करें?

  3. चुनिंदा उपयोगकर्ताओं के पास mysql में एक से अधिक विशिष्ट रिकॉर्ड हैं

  4. MySQL में बाइनरी डेटा

  5. Google क्लाउड प्लेटफ़ॉर्म (GCP) पर MySQL फ़ेलओवर और फ़ेलबैक प्राप्त करना