Bạn thật gần!
Vì bạn nói rằng bạn đang hiển thị quốc gia và năm từ A và giới hạn bởi A. Country
của Thổ Nhĩ Kỳ, Thổ Nhĩ Kỳ là tất cả những gì bạn sẽ thấy. Bạn cần thay đổi các lựa chọn thành B.country
và B.year
hoặc thay đổi mệnh đề where thành B.country
.
Điều này đang sử dụng kết hợp chéo sẽ làm chậm hơn khi có nhiều bản ghi hơn trong một bảng.
SELECT DISTINCT b.Country, b.Year
FROM table1 AS a,
table1 AS b
WHERE a.Year=b.Year
and a.Country='Turkey';
có thể được viết là ... và có thể có cùng một kế hoạch thực hiện.
SELECT DISTINCT b.Country, b.Year
FROM table1 AS a
CROSS JOIN table1 AS b
WHERE a.Year=b.Year
and a.Country='Turkey';
ORThis sử dụng INNER JOIN giới hạn công việc mà engine phải thực hiện và không bị suy giảm hiệu suất mà một kết nối chéo sẽ làm.
SELECT DISTINCT a.Country, a.Year
FROM table1 AS a
INNER JOIN table1 AS b
on a.Year=b.Year
and b.Country='Turkey';
TẠI SAO:
Xem xét công cụ SQL sẽ làm gì khi kết nối xảy raA 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 |
+------------+------+--------+------------+------+--------+
Vì vậy, khi bạn nói hiển thị A.Country
và A.Year
ở đâu A.Country
là Thổ Nhĩ Kỳ, bạn có thể thấy tất cả những gì nó có thể trả lại là Thổ Nhĩ Kỳ (do chỉ có 1 bản ghi riêng biệt)
Nhưng nếu bạn làm B.Country
là Thổ Nhĩ Kỳ và hiển thị A.Country
, bạn sẽ đến Pháp, Canada và Thổ Nhĩ Kỳ!