तुम बहुत करीब हो!
चूंकि आप कहते हैं कि आप ए से देश और वर्ष प्रदर्शित कर रहे हैं और 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
, आपको फ़्रांस, कनाडा और तुर्की मिलेगा!