Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

การใช้ SELF JOIN ใน MySQL

SELF JOIN คือการ JOIN ตารางกับตัวเอง โดยใช้ Alias (t1, t2) เพื่อเปรียบเทียบแถวภายในตารางเดียวกัน

ตัวอย่างการใช้งาน

สร้างตาราง:

mysql> create table SelfJoinDemo (
    -> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    -> CountryName varchar(20),
    -> CountryRank int,
    -> `Year` varchar(10)
    -> );
Query OK, 0 rows affected (1.02 sec)

เพิ่มข้อมูล (มี UK ซ้ำ 2 ปี):

mysql> insert into SelfJoinDemo(CountryName,CountryRank,`Year`) values('US',1,'2016');
mysql> insert into SelfJoinDemo(CountryName,CountryRank,`Year`) values('UK',5,'2013');
mysql> insert into SelfJoinDemo(CountryName,CountryRank,`Year`) values('France',45,'2010');
mysql> insert into SelfJoinDemo(CountryName,CountryRank,`Year`) values('Turkey',3,'2000');
mysql> insert into SelfJoinDemo(CountryName,CountryRank,`Year`) values('Japan',78,'1995');
mysql> insert into SelfJoinDemo(CountryName,CountryRank,`Year`) values('Romania',110,'2007');
mysql> insert into SelfJoinDemo(CountryName,CountryRank,`Year`) values('UK',3,'2000');

ข้อมูล:

+----+-------------+-------------+------+
| Id | CountryName | CountryRank | Year |
+----+-------------+-------------+------+
|  1 | US          |           1 | 2016 |
|  2 | UK          |           5 | 2013 |
|  3 | France      |          45 | 2010 |
|  4 | Turkey      |           3 | 2000 |
|  5 | Japan       |          78 | 1995 |
|  6 | Romania     |         110 | 2007 |
|  7 | UK          |           3 | 2000 |
+----+-------------+-------------+------+

SELF JOIN: หาปีของ US แล้วดูประเทศอื่นในปีเดียวกัน:

mysql> SELECT DISTINCT t1.CountryName, t2.Year
    -> FROM SelfJoinDemo AS t1, SelfJoinDemo AS t2
    -> WHERE t1.Year = t2.Year AND t1.CountryName = 'US';

ผลลัพธ์:

+-------------+------+
| CountryName | Year |
+-------------+------+
| US          | 2016 |
+-------------+------+

เพราะ US มีแค่ปี 2016 ไม่มีประเทศอื่นในปี 2016

กรณีใช้งานจริง

  • Hierarchical data (Employee-Manager)
  • เปรียบเทียบแถวในตารางเดียวกัน (เช่น หาคู่ที่มีค่าใกล้เคียง)
  • หาข้อมูลซ้ำ (Duplicates)