Vous n'êtes pas identifié(e).
Bonjour,
Je dois écrire une requête SQL sur une Base Postgres, en interrogeant une première table pour une valeur x et vérifier si cette valeur n’existe pas dans une autre table.
On m'a conseillé le WHERE "valeur" NOT IN (SELECT from seconde table) mais cela ne fonctionne pas.
Merci par avance de votre aide.
Cordialement
Hors ligne
Bonjour,
Si je comprends bien le besoin il vous faut un LEFT JOIN entre les 2 tables, cf https://www.postgresql.org/docs/current … sions.html .
Julien.
https://rjuju.github.io/
Hors ligne
Ou un NOT EXISTS si c'est simplement pour un test d'existence. le NOT IN est plus dangereux: il peut y avoir des NULL dans la seconde liste, alors il y a des optimisations qui pourraient ne pas être faisables. Le LEFT JOIN risque de vous dupliquer les enregistrements s'ii y en a plus d'un qui correspond
Quelque chose du genre
SELECT * from t1 where NOT EXISTS (SELECT 1 FROM t2 where t1.a=t2.a)
Dernière modification par Marc Cousin (24/01/2023 09:52:52)
Marc.
Hors ligne
Bonjour,
Merci pour vos réponses.
Sur cette dernière réponse: SELECT * from t1 where NOT EXISTS (SELECT 1 FROM t2 where t1.a=t2.a) étant novice pouvez-vous m'expliquer ce qu'il faut comprendre par:
select 1 cela correspond à quoi ?
et where t1.a=t2.a) ".a" est-ce la valeur que je veux chercher??
Merci beaucoup de votre aide.
Hors ligne
Le select 1 est en fait juste une "astuce" d'écriture. Le not exists vérifie juste que la sous-requête retourne un enregistrement. Son contenu n'a absolument aucune importance. J'ai pris l'habitude de l'écrire comme ça parce que pour le relecteur éventuel de la requête, c'est comme ça évident que le contenu de la sous-requête ne sert à rien. Ça pourrait être select 0 ou select 'toto' ça marcherait exactement pareil
Marc.
Hors ligne
OK j'ai compris par contre pour le Where t1.a=T2.a est-ce la valeur recherchée??
Merci beaucoup de votre aide.
Hors ligne
exactement. C'est le critère qui met en correspondance les enregistrements des deux tables.
Marc.
Hors ligne
Super je teste de suite et vous tiens au courant.
merci encore
Hors ligne