Giới thiệu
Tìm số lượng cặp giá trị có quan hệ "tương hỗ" (mutual relation): cột A của hàng 1 = cột B của hàng 2 VÀ cột B của hàng 1 = cột A của hàng 2.
1. Tạo bảng và dữ liệu
mysql> create table DemoTable1543 (
-> Value1 int,
-> Value2 int
-> );
Query OK, 0 rows affected (1.36 sec)
mysql> insert into DemoTable1543 values(57,60);
Query OK, 1 row affected (0.52 sec)
mysql> insert into DemoTable1543 values(60,68);
Query OK, 1 row affected (0.38 sec)
mysql> insert into DemoTable1543 values(90,98);
Query OK, 1 row affected (0.36 sec)
mysql> insert into DemoTable1543 values(98,90);
Query OK, 1 row affected (0.20 sec)
2. Dữ liệu
mysql> select * from DemoTable1543;
+--------+--------+ | Value1 | Value2 | +--------+--------+ | 57 | 60 | | 60 | 68 | | 90 | 98 | | 98 | 90 | +--------+--------+ 4 rows in set (0.00 sec)
Chỉ cặp (90,98) và (98,90) có quan hệ tương hỗ.
3. Truy vấn đếm với SELF JOIN
mysql> select count(*) from DemoTable1543 tbl1
-> join DemoTable1543 tbl2
-> on tbl1.Value2 = tbl2.Value1
-> where tbl1.Value1 = 90 and tbl2.Value2 = 90;
4. Kết quả
+----------+ | count(*) | +----------+ | 1 | +----------+ 1 row in set (0.00 sec)
Giải thích:
tbl1.Value2 = tbl2.Value1: 98 = 98 ✓tbl1.Value1 = 90vàtbl2.Value2 = 90: 90 = 90 ✓- Kết quả: 1 cặp thỏa mãn
Áp dụng: Phát hiện bạn bè chung, quan hệ theo dõi lẫn nhau, giao dịch đối ứng...