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ỳ!