Renvoie la ligne uniquement si la valeur n'existe pas
P粉043470158
P粉043470158 2023-08-24 22:07:48
0
2
376
<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 >
P粉043470158
P粉043470158

répondre à tous(2)
P粉596161915

Par souci d'exhaustivité (et je pense vraiment que c'est plus approprié), je vous encourage à utiliser le simple NOT EXISTS.

SELECT * FROM reservation R
WHERE NOT EXISTS (
  SELECT 1 FROM reservation_log
  WHERE reservation_id = R.id
    AND change_type = 'cancel'
);
P粉692052513
SELECT *
FROM reservation
WHERE id NOT IN (select reservation_id
                 FROM reservation_log
                 WHERE change_type = 'cancel')

ou :

SELECT r.*
FROM reservation r
LEFT JOIN reservation_log l ON r.id = l.reservation_id AND l.change_type = 'cancel'
WHERE l.id IS NULL

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.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal