Du är så nära!
Eftersom du säger att du visar land och år från A och begränsar med A. Country av Turkiet, Turkiet är allt du kommer att se. Du måste antingen ändra valen för att vara B.country och B.year eller ändra where-satsen så att den blir B.country .
Detta använder en korskoppling som blir långsammare ju fler poster det finns i en tabell.
SELECT DISTINCT b.Country, b.Year
FROM table1 AS a,
table1 AS b
WHERE a.Year=b.Year
and a.Country='Turkey';
skulle kunna skrivas som... och skulle sannolikt ha samma utförandeplan.
SELECT DISTINCT b.Country, b.Year
FROM table1 AS a
CROSS JOIN table1 AS b
WHERE a.Year=b.Year
and a.Country='Turkey';
ELLERDen här använder en INNER JOIN som begränsar det arbete som motorn måste göra och inte lider av prestandaförsämring som en tvärskarvning skulle göra.
SELECT DISTINCT a.Country, a.Year
FROM table1 AS a
INNER JOIN table1 AS b
on a.Year=b.Year
and b.Country='Turkey';
VARFÖR:
Tänk på vad SQL-motorn kommer att göra när kopplingen skerA 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 |
+------------+------+--------+------------+------+--------+
Så när du sa visa A.Country och A.Year där A.Country är Turkiet, du kan se allt det kan returnera är Turkiet (på grund av den distinkta endast 1 posten)
Men om du gör B.Country är Turkiet och visar A.Country , får du Frankrike, Kanada och Turkiet!