Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Bagaimana Gabung Kiri / IS NULL menghilangkan catatan yang ada di satu tabel dan tidak di tabel lain?

Hal ini dapat dijelaskan dengan berikut

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)

Berikut table1.id <-> table2.t1id

Sekarang ketika kita melakukan left join dengan kunci penghubung dan jika tabel kiri adalah tabel1 maka akan mendapatkan semua data dari tabel1 dan pada catatan yang tidak cocok pada tabel2 akan disetel ke 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)

Lihat bahwa table1.id =3 tidak memiliki nilai pada table2 sehingga ditetapkan sebagai nullKetika Anda menerapkan kondisi where, ia akan melakukan penyaringan lebih lanjut

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)


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Masukkan baris dan hindari kondisi balapan (PHP/MySQL)

  2. Apa itu transaction.commit() di Hibernate?

  3. Wildcard dalam nama kolom untuk MySQL

  4. Data biner tidak disimpan dengan benar di MySQL

  5. Dapatkan dari database tetapi hanya 30 hari terakhir