gefiltert. Sie sind so nah dran!
Da Sie sagen, dass Sie das Land und Jahr von A anzeigen und durch A. Country
der Türkei begrenzen, ist die Türkei alles, was Sie sehen werden. Sie müssen entweder die Auswahlen auf B.country
und B.year
ändern oder die Where-Klausel auf B.country
ändern.
Dies verwendet einen Cross-Join, der umso 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 den gleichen 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';
OR Diese verwendet ein INNER JOIN, die die Arbeit beschränkt sich der Motor tun müssen und leidet nicht unter Leistungseinbußen, die ein Kreuz verbinden würde.
SELECT DISTINCT a.Country, a.Year
FROM table1 AS a
INNER JOIN table1 AS b
WHERE a.Year=b.Year
and b.Country='Turkey';
WARUM:
Überlegen Sie, was die SQL-Engine tun wird, wenn die Verbindung tritt AB
+------------+------+--------+------------+------+--------+
| 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 die Anzeige A.Country
und A.Year
wo A.Country
Türkei ist, können Sie alle sehen es kann zurückgegeben werden ist die Türkei (aufgrund der eindeutigen nur 1 Datensatz)
Aber wenn Sie tun B.Country
ist Türkei und Display A.Country
, erhalten Sie Frankreich, Kanada und die Türkei!
+1 zum Ausprobieren und googeln. 'jsut ändern' a.country 'zu' b.country'. – xQbert