Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment Left Join / IS NULL élimine-t-il les enregistrements qui sont là dans une table et pas dans l'autre ?

Cela pourrait être expliqué avec ce qui suit

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)

Ici table1.id <-> table2.t1id

Maintenant, quand nous faisons une left join avec la clé de jointure et si la table de gauche est la table1, alors elle obtiendra toutes les données de la table1 et dans l'enregistrement non correspondant de la table2 sera défini sur 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)

Voir que table1.id =3 n'a pas de valeur dans table2 donc il est défini sur nullLorsque vous appliquez la condition where, il effectuera un filtrage supplémentaire

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)