Du er så tæt på!
Da du siger, at du viser landet og året fra A og begrænser med A. Country
af Tyrkiet, Tyrkiet er alt, hvad du kommer til at se. Du skal enten ændre valgene til at være B.country
og B.year
eller ændre where-sætningen til at være B.country
.
Dette bruger en cross join, som bliver langsommere, jo flere poster der er i en tabel.
SELECT DISTINCT b.Country, b.Year
FROM table1 AS a,
table1 AS b
WHERE a.Year=b.Year
and a.Country='Turkey';
kunne skrives som... og ville sandsynligvis have den samme udførelsesplan.
SELECT DISTINCT b.Country, b.Year
FROM table1 AS a
CROSS JOIN table1 AS b
WHERE a.Year=b.Year
and a.Country='Turkey';
ELLER Dette bruger en INNER JOIN, som begrænser det arbejde, motoren skal udføre og ikke lider af ydeevneforringelse, som en krydsforbindelse ville.
SELECT DISTINCT a.Country, a.Year
FROM table1 AS a
INNER JOIN table1 AS b
on a.Year=b.Year
and b.Country='Turkey';
HVORFOR:
Overvej, hvad SQL-motoren vil gøre, når joinforbindelsen 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å da du sagde vis A.Country
og A.Year
hvor A.Country
er Tyrkiet, kan du se alt, hvad det kan returnere, er Tyrkiet (på grund af den distinkte kun 1 post)
Men hvis du gør B.Country
er Tyrkiet og viser A.Country
, får du Frankrig, Canada og Tyrkiet!