あなたはとても近いです!
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';
またはこれは、エンジンが実行する必要のある作業を制限し、クロス結合のようなパフォーマンスの低下に悩まされない内部結合を使用します。
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エンジンが何をするかを検討してください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 |
+------------+------+--------+------------+------+--------+
つまり、A.Country
を表示すると言ったとき およびA.Year
ここで、A.Country
はトルコです、あなたはそれが返すことができるすべてがトルコであることがわかります(明確な唯一のレコードのため)
ただし、B.Country
を実行する場合 はトルコで、A.Country
を表示します 、フランス、カナダ、トルコを取得します!