Vous êtes si proche !
Puisque vous dites que vous affichez le pays et l'année à partir de A et que vous limitez par A. Country
de la Turquie, la Turquie est tout ce que vous allez voir. Vous devez soit changer les sélections pour être B.country
et B.year
ou changez la clause where en B.country
.
Cela utilise une jointure croisée qui deviendra plus lente plus il y a d'enregistrements dans une table.
SELECT DISTINCT b.Country, b.Year
FROM table1 AS a,
table1 AS b
WHERE a.Year=b.Year
and a.Country='Turkey';
pourrait être écrit comme... et aurait probablement le même plan d'exécution.
SELECT DISTINCT b.Country, b.Year
FROM table1 AS a
CROSS JOIN table1 AS b
WHERE a.Year=b.Year
and a.Country='Turkey';
ORThis utilise un INNER JOIN qui limite le travail que le moteur doit faire et ne souffre pas de la dégradation des performances qu'une jointure croisée pourrait subir.
SELECT DISTINCT a.Country, a.Year
FROM table1 AS a
INNER JOIN table1 AS b
on a.Year=b.Year
and b.Country='Turkey';
POURQUOI :
Considérez ce que le moteur SQL fera lorsque la jointure se produitA 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 |
+------------+------+--------+------------+------+--------+
Donc, quand vous avez dit afficher A.Country
et A.Year
où A.Country
est la Turquie, vous pouvez voir que tout ce qu'il peut renvoyer est la Turquie (en raison du seul enregistrement distinct)
Mais si vous faites B.Country
est la Turquie et affichez A.Country
, vous aurez la France, le Canada et la Turquie !