sql >> Base de Datos >  >> RDS >> Mysql

¿Cómo Left Join / IS NULL elimina los registros que están en una tabla y no en la otra?

Esto podría explicarse con lo siguiente

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)

Aquí table1.id <-> table2.t1id

Ahora, cuando hacemos una left join con la tecla de combinación y si la tabla de la izquierda es la tabla 1, obtendrá todos los datos de la tabla 1 y en el registro que no coincida en la tabla 2 se establecerá en nulo

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)

Vea que table1.id =3 no tiene un valor en table2, por lo que se establece como nulo. Cuando aplique la condición where, se filtrará más

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)