Điều này có thể được giải thích với những điều sau
mysql> select * from table1 ;
+------+------+
| id | val |
+------+------+
| 1 | 10 |
| 2 | 30 |
| 3 | 40 |
+------+------+
3 rows in set (0.00 sec)
mysql> select * from table2 ;
+------+------+
| id | t1id |
+------+------+
| 1 | 1 |
| 2 | 2 |
+------+------+
2 rows in set (0.00 sec)
Đây table1.id <-> table2.t1id
Bây giờ khi chúng ta thực hiện left join
với khóa kết hợp và nếu bảng bên trái là table1 thì nó sẽ lấy tất cả dữ liệu từ table1 và trong bản ghi không khớp trên table2 sẽ được đặt thành null
mysql> select t1.* , t2.t1id from table1 t1
left join table2 t2 on t2.t1id = t1.id ;
+------+------+------+
| id | val | t1id |
+------+------+------+
| 1 | 10 | 1 |
| 2 | 30 | 2 |
| 3 | 40 | NULL |
+------+------+------+
3 rows in set (0.00 sec)
Xem rằng table1.id =3 không có giá trị trong table2 nên được đặt là null Khi bạn áp dụng điều kiện where, nó sẽ thực hiện lọc thêm
mysql> select t1.* , t2.t1id from table1 t1
left join table2 t2 on t2.t1id = t1.id where t2.t1id is null;
+------+------+------+
| id | val | t1id |
+------+------+------+
| 3 | 40 | NULL |
+------+------+------+
1 row in set (0.00 sec)