Jste tak blízko!
Protože říkáte, že zobrazujete zemi a rok od A a omezujete A. Country
Turecka, Turecko je vše, co uvidíte. Buď musíte změnit výběr na B.country
a B.year
nebo změňte klauzuli where na B.country
.
Toto používá křížové spojení, které bude pomalejší, čím více záznamů bude v tabulce.
SELECT DISTINCT b.Country, b.Year
FROM table1 AS a,
table1 AS b
WHERE a.Year=b.Year
and a.Country='Turkey';
by mohl být napsán jako... a pravděpodobně by měl stejný plán provádění.
SELECT DISTINCT b.Country, b.Year
FROM table1 AS a
CROSS JOIN table1 AS b
WHERE a.Year=b.Year
and a.Country='Turkey';
NEBOToto používá INNER JOIN, které omezuje práci, kterou motor musí dělat, a netrpí zhoršením výkonu, které by způsobilo křížové spojení.
SELECT DISTINCT a.Country, a.Year
FROM table1 AS a
INNER JOIN table1 AS b
on a.Year=b.Year
and b.Country='Turkey';
PROČ:
Zvažte, co udělá stroj SQL, když dojde ke spojení 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 |
+------------+------+--------+------------+------+--------+
Takže když jste řekl zobrazit A.Country
a A.Year
kde A.Country
je Turecko, můžete vidět vše, co se může vrátit, je Turecko (kvůli odlišnému pouze 1 záznamu)
Ale pokud uděláte B.Country
je Turecko a zobrazí se A.Country
, získáte Francii, Kanadu a Turecko!