sql >> Databáze >  >> RDS >> Mysql

Jak Left Join / IS NULL eliminuje záznamy, které jsou v jedné tabulce a ne ve druhé?

To by se dalo vysvětlit následujícím

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)

Zde table1.id <-> table2.t1id

Nyní, když provedeme left join se spojovacím klíčem a pokud je levá tabulka tabulka1, získá všechna data z tabulky1 a v neodpovídajícím záznamu na tabulce2 bude nastavena na 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)

Podívejte se, že tabulka1.id =3 nemá hodnotu v tabulce2, takže je nastavena jako null Když použijete podmínku where, provede se další filtrování

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. Jak používat klauzuli HAVING a ORDER BY v SQL

  2. Vytvoření spouštěče generujícího hodnotu sloupce ID před vložením při vytváření nových tabulek

  3. Potřebujete pomoc s propojením tabulek oracle v MS Access

  4. Jak získat základní typ pole v postgres přes jdbc