Mysql
 sql >> база данни >  >> RDS >> Mysql

Как Left Join / IS NULL елиминира записи, които са там в едната таблица, а не в другата?

Това може да се обясни със следното

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)

Тук table1.id <-> table2.t1id

Сега, когато правим left join с ключа за присъединяване и ако лявата таблица е таблица1, тогава тя ще получи всички данни от таблица1 и в несъвпадащ запис на таблица2 ще бъде зададено на нула

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)

Вижте, че table1.id =3 няма стойност в table2, така че е зададен като null. Когато приложите условието where, той ще извърши допълнително филтриране

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. Android не успява да се свърже правилно с базата данни MySQL

  2. Грешка при JDBC връзката:неразпозната часова зона

  3. Когато импортирате CSV, пропуснете заглавката или първия ред

  4. MySql Меко изтриване

  5. Продукти на Magento импортират от базата данни с помощта на SQL заявка