Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie eliminiert Left Join / IS NULL Datensätze, die in einer Tabelle vorhanden sind und in der anderen nicht?

Dies könnte folgendermaßen erklärt werden

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)

Hier table1.id <-> table2.t1id

Wenn wir jetzt eine left join machen mit dem Verbindungsschlüssel und wenn die linke Tabelle Tabelle1 ist, werden alle Daten aus Tabelle1 abgerufen und bei nicht übereinstimmenden Datensätzen in Tabelle2 auf null gesetzt

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)

Sehen Sie, dass table1.id =3 keinen Wert in table2 hat, also ist es auf null gesetzt. Wenn Sie die where-Bedingung anwenden, wird weiter gefiltert

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)