あなたはとても近いです!
Aから国と年を表示していて、トルコのA. Country
で制限していると言えば、トルコはあなただけのものです。選択をB.country
とB.year
に変更するか、またはwhere句をB.country
に変更する必要があります。
これは、クロス結合を使用しているため、テーブル内のレコード数が増えます。
と書かれている可能性があり、同じ実行計画を持つ可能性があります。
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 これはINNERは、エンジンがしなければならない仕事を制限し、クロスだろうに参加することにパフォーマンスの低下に苦しむないJOINを使用しています。
あなたはA.Country
はトルコで、あなたはすべて見ることができるディスプレイA.Country
とA.Year
を言ったときに参加だから 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 |
+------------+------+--------+------------+------+--------+
を発生したときに、SQLエンジンがどうなるか考えてみましょう:WHY
SELECT DISTINCT a.Country, a.Year
FROM table1 AS a
INNER JOIN table1 AS b
WHERE a.Year=b.Year
and b.Country='Turkey';
それはトルコです(別の1レコードしかないため)
B.Country
はトルコ、A.Country
と表示されています。あなたはフランス、カナダ、トルコを手に入れます!
+1を試してみてください。 '' a.country'を 'b.country'に変更します。 – xQbert