Mysql
 sql >> Baza danych >  >> RDS >> Mysql

W jaki sposób Left Join / IS NULL eliminuje rekordy, które znajdują się w jednej tabeli, a nie w drugiej?

Można to wyjaśnić w następujący sposób

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)

Tutaj table1.id <-> table2.t1id

Teraz, kiedy robimy left join z kluczem łączącym i jeśli lewą tabelą jest tabela 1, to pobierze wszystkie dane z tabeli 1, a w niepasującym rekordzie w tabeli 2 zostanie ustawiona wartość 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)

Zobacz, że table1.id =3 nie ma wartości w tabeli 2, więc jest ustawiona jako null Po zastosowaniu warunku WHERE wykona dalsze filtrowanie

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. sugestia tworzenia struktury bazy danych mysql

  2. Zmienne PyMySQL w zapytaniach

  3. JDBC a usługa sieciowa dla Androida

  4. Uruchom zapytanie SQL podczas uruchamiania usługi MySQL

  5. MySQL i PDO:Czy PDO::lastInsertId teoretycznie może zawieść?