Du bist so nah dran!
Da Sie sagen, dass Sie das Land und das Jahr von A anzeigen und durch A. Country
der Türkei, die Türkei ist alles, was Sie sehen werden. Sie müssen entweder die Auswahl auf B.country
ändern und B.year
oder ändern Sie die where-Klausel in B.country
.
Dies verwendet einen Cross-Join, der langsamer wird, je mehr Datensätze in einer Tabelle vorhanden sind.
SELECT DISTINCT b.Country, b.Year
FROM table1 AS a,
table1 AS b
WHERE a.Year=b.Year
and a.Country='Turkey';
könnte geschrieben werden als... und hätte wahrscheinlich denselben Ausführungsplan.
SELECT DISTINCT b.Country, b.Year
FROM table1 AS a
CROSS JOIN table1 AS b
WHERE a.Year=b.Year
and a.Country='Turkey';
ODERDies verwendet einen INNER JOIN, der die Arbeit begrenzt, die die Engine leisten muss, und nicht unter Leistungseinbußen leidet, die ein Cross Join erleiden würde.
SELECT DISTINCT a.Country, a.Year
FROM table1 AS a
INNER JOIN table1 AS b
on a.Year=b.Year
and b.Country='Turkey';
WARUM:
Überlegen Sie, was die SQL-Engine tun wird, wenn der Join auftrittA 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 |
+------------+------+--------+------------+------+--------+
Also, wenn Sie sagten, zeigen Sie A.Country
an und A.Year
wobei A.Country
die Türkei ist, können Sie sehen, dass alles, was es zurückgeben kann, die Türkei ist (aufgrund der Unterscheidung nur 1 Datensatz)
Aber wenn Sie B.Country
machen ist die Türkei und zeigen Sie A.Country
an , erhalten Sie Frankreich, Kanada und die Türkei!