sql >> Databasteknik >  >> RDS >> Mysql

Hur eliminerar Left Join / IS NULL poster som finns i den ena tabellen och inte i den andra?

Detta kan förklaras med följande

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)

Här table1.id <-> table2.t1id

Nu när vi gör en left join med kopplingsnyckeln och om den vänstra tabellen är tabell1 kommer den att få all data från tabell1 och i icke-matchande post på tabell2 kommer den att ställas in på 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 att tabell1.id =3 inte har ett värde i tabell2 så det är satt till null När du tillämpar where-villkoret kommer det att göra ytterligare 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 Apex 5.0 - Visa statisk bild

  2. java -postgresql senast infogade id vid infogning får inte

  3. SQL VÄLJ SUMMA

  4. Förbisedda T-SQL-ädelstenar