Kalian sangat dekat!
Karena Anda mengatakan Anda menampilkan negara dan tahun dari A dan dibatasi oleh A. Country
dari Turki, hanya Turki yang akan Anda lihat. Anda juga perlu mengubah pilihan menjadi B.country
dan B.year
atau ubah klausa where menjadi B.country
.
Ini menggunakan gabungan silang yang akan semakin lambat semakin banyak catatan yang ada di tabel.
SELECT DISTINCT b.Country, b.Year
FROM table1 AS a,
table1 AS b
WHERE a.Year=b.Year
and a.Country='Turkey';
dapat ditulis sebagai... dan kemungkinan akan memiliki rencana eksekusi yang sama.
SELECT DISTINCT b.Country, b.Year
FROM table1 AS a
CROSS JOIN table1 AS b
WHERE a.Year=b.Year
and a.Country='Turkey';
ATAUIni menggunakan INNER JOIN yang membatasi pekerjaan yang harus dilakukan mesin dan tidak mengalami penurunan kinerja seperti yang akan terjadi pada cross 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';
MENGAPA:
Pertimbangkan apa yang akan dilakukan mesin SQL saat penggabungan terjadiA 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 |
+------------+------+--------+------------+------+--------+
Jadi ketika Anda mengatakan tampilkan A.Country
dan A.Year
di mana A.Country
adalah Turki, Anda dapat melihat semua yang dapat dikembalikan adalah Turki (karena hanya 1 catatan yang berbeda)
Tetapi jika Anda melakukan B.Country
adalah Turki dan tampilkan A.Country
, Anda akan mendapatkan Prancis, Kanada, dan Turki!