Толкова сте близо!
Тъй като казвате, че показвате държавата и годината от A и ограничавате с A. Country
на Турция, Турция е всичко, което ще видите. Трябва или да промените избора на B.country
и B.year
или променете клаузата where да бъде B.country
.
Това използва кръстосано свързване, което ще става по-бавно, колкото повече записи има в таблицата.
SELECT DISTINCT b.Country, b.Year
FROM table1 AS a,
table1 AS b
WHERE a.Year=b.Year
and a.Country='Turkey';
може да бъде написано като... и вероятно ще има същия план за изпълнение.
SELECT DISTINCT b.Country, b.Year
FROM table1 AS a
CROSS JOIN table1 AS b
WHERE a.Year=b.Year
and a.Country='Turkey';
ИЛИТова използва INNER JOIN, което ограничава работата, която двигателят трябва да извърши, и не страда от влошаване на производителността, което би могло при кръстосано свързване.
SELECT DISTINCT a.Country, a.Year
FROM table1 AS a
INNER JOIN table1 AS b
on a.Year=b.Year
and b.Country='Turkey';
ЗАЩО:
Помислете какво ще направи SQL машината, когато се случи присъединяването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 |
+------------+------+--------+------------+------+--------+
Така че, когато казахте показване A.Country
и A.Year
където A.Country
е Турция, можете да видите всичко, което може да върне, е Турция (поради отделния само 1 запис)
Но ако го направите B.Country
е Турция и показва A.Country
, ще получите Франция, Канада и Турция!