Je bent zo dichtbij!
Aangezien u zegt dat u het land en het jaar vanaf A weergeeft en beperkt tot A. Country
van Turkije, Turkije is alles wat je gaat zien. U moet ofwel de selecties wijzigen in B.country
en B.year
of verander de waar-clausule in B.country
.
Dit maakt gebruik van een cross join die langzamer wordt naarmate er meer records in een tabel zijn.
SELECT DISTINCT b.Country, b.Year
FROM table1 AS a,
table1 AS b
WHERE a.Year=b.Year
and a.Country='Turkey';
zou kunnen worden geschreven als... en zou waarschijnlijk hetzelfde uitvoeringsplan hebben.
SELECT DISTINCT b.Country, b.Year
FROM table1 AS a
CROSS JOIN table1 AS b
WHERE a.Year=b.Year
and a.Country='Turkey';
OFDit maakt gebruik van een INNER JOIN die het werk dat de motor moet doen, beperkt en geen last heeft van prestatievermindering die een cross-join zou hebben.
SELECT DISTINCT a.Country, a.Year
FROM table1 AS a
INNER JOIN table1 AS b
on a.Year=b.Year
and b.Country='Turkey';
WAAROM:
Bedenk wat de SQL-engine zal doen als de join plaatsvindtA 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 |
+------------+------+--------+------------+------+--------+
Dus toen je zei:toon A.Country
en A.Year
waar A.Country
is Turkije, je kunt zien dat het alleen Turkije kan retourneren (vanwege het onderscheidende slechts 1 record)
Maar als je B.Country
. doet is Turkije en toon A.Country
, krijg je Frankrijk, Canada en Turkije!