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!