Renvoie la ligne uniquement si la valeur n'existe pas
P粉043470158
2023-08-24 22:07:48
<p>J'ai 2 tables - <code>Réservation</code> : </p>
<pre class="brush:php;toolbar:false;">id some_other_column |
----+------------------
1 | valeur
2|valeur
3 | valeur</pré>
<p>Deuxième tableau - <code>reservation_log</code> : </p>
<pre class="brush:php;toolbar:false;">id |
----+----------------+-------------
1 | 1 | créer
2 | 2 | créer
3 | 3 | créer
4 | 1 | annuler
5 | 2 | annuler</pré>
<p>Je dois uniquement sélectionner les réservations qui ne sont pas annulées (juste l'ID 3 dans ce cas).
Je peux facilement sélectionner "Annuler" en utilisant la simple condition <code>WHERE change_type = Cancel</code>, mais j'ai du mal à sélectionner "Ne pas annuler" car la simple condition <code>WHERE</code> ça ne marche pas ici, effet. ≪/p >
Par souci d'exhaustivité (et je pense vraiment que c'est plus approprié), je vous encourage à utiliser le simple
NOT EXISTS
.ou :
La première version est plus intuitive, mais je pense que vous obtiendrez généralement de meilleures performances avec la deuxième version (en supposant que vous ayez des index sur les colonnes utilisées dans la jointure).
La deuxième version fonctionne car LEFT JOIN renvoie une ligne pour toutes les lignes de la première table. Lorsque
ON
条件成功时,这些行将包含第二个表中的列,就像INNER JOIN
一样。当条件失败时,返回的行将包含第二个表中所有列的NULL
。然后,WHERE l.id IS NULL
le test correspond à ces lignes, il trouve donc toutes les lignes qui ne correspondent pas entre les tables.