Jesteś tak blisko!
Ponieważ mówisz, że wyświetlasz kraj i rok z A i ograniczasz przez A. Country
Turcji, Turcja to wszystko, co zobaczysz. Musisz zmienić wybrane na B.country
i B.year
lub zmień klauzulę WHERE na B.country
.
Jest to użycie łączenia krzyżowego, które będzie stawać się wolniejsze, im więcej rekordów jest w tabeli.
SELECT DISTINCT b.Country, b.Year
FROM table1 AS a,
table1 AS b
WHERE a.Year=b.Year
and a.Country='Turkey';
mógłby być napisany jako... i prawdopodobnie miałby taki sam plan wykonania.
SELECT DISTINCT b.Country, b.Year
FROM table1 AS a
CROSS JOIN table1 AS b
WHERE a.Year=b.Year
and a.Country='Turkey';
ORTo używa INNER JOIN, które ogranicza pracę, którą musi wykonać silnik, i nie cierpi z powodu pogorszenia wydajności, które miałoby miejsce przy łączeniu krzyżowym.
SELECT DISTINCT a.Country, a.Year
FROM table1 AS a
INNER JOIN table1 AS b
on a.Year=b.Year
and b.Country='Turkey';
DLACZEGO:
Zastanów się, co zrobi silnik SQL, gdy nastąpi złączenieA 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 |
+------------+------+--------+------------+------+--------+
Więc kiedy powiedziałeś wyświetl A.Country
i A.Year
gdzie A.Country
to Turcja, widać, że wszystko, co może zwrócić, to Turcja (ze względu na wyróżniający się tylko 1 rekord)
Ale jeśli zrobisz B.Country
jest Turcja i wyświetla A.Country
, dostaniesz Francję, Kanadę i Turcję!