sql >> Database teknologi >  >> RDS >> Mysql

Hvordan eliminerer Left Join / IS NULL poster, som er der i den ene tabel og ikke i den anden?

Dette kan forklares med følgende

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)

Her table1.id <-> table2.t1id

Når vi nu laver en left join med joining-nøglen, og hvis den venstre tabel er tabel1, vil den få alle data fra tabel1, og i ikke-matchende post på tabel2 vil den blive sat til 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)

Se, at table1.id =3 ikke har en værdi i tabel2, så det er sat til null. Når du anvender where-betingelsen, foretager den yderligere filtrering

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. oracle deadlock forælder/barn og barn har indekseret FK

  2. MySQL - Denne version af MySQL understøtter endnu ikke 'LIMIT &IN/ALL/ANY/SOME underforespørgsel

  3. Observatørmønster i Oracle

  4. Få indeksretning fra informationsskema i MySQL