Comment exclure tous les enregistrements pour PUID du résultat lorsque A.PUID = B.EUID et A.PID <> B.LID
Tableau A
PUID PID ECODE 300 1008 RG
Tableau B
EUID LID ECODE 100 1003 RG 100 1004 RG 100 1005 RG 200 1006 CA 300 1009 RG
résultat attendu
PUID PID PCODE 100 1003 RG 200 1006 CA 200 1007 CA 300 1008 RG
Essayé avec n'existe pas, n'a pas fonctionné. sérigraphie pour les tableaux joints
3 Réponses :
Jetez un œil à la logique de jointure pour la base de données, si vous joignez sur une colonne, vous pouvez prendre ceux qui sont identiques (contient) ou ceux qui sont null (ne contient pas), il existe différents types de jointures qui peuvent être utilisés en combinaison avec un où la déclaration et dans vos devoirs, vos mentors aiment que vous les compreniez et les appliquiez.
Ouvrez google et regardez les jointures, ou regardez ceci https://www.w3schools.com/sql/sql_join.asp
Vous pouvez essayer ci-dessous - DEMO
select A.* from A join ( select A.puid from A left join B on A.puid=B.puid and A.pid=B.pid group by A.puid having sum(case when B.pid is null then 0 else 1 end)=0 )X on A.puid=X.puid
Je pense que j'utiliserais une left join
et des fonctions de fenêtre:
select a.* from (select a.*, count(b.euid) over (partition by a.puid) as num_matches from a left join b on a.puid = b.euid and a.pid = b.lid ) a where num_matches = 0;
Voici un violon db <>.
Pourquoi le
200 1007 CA
n'est-il pas également dans les résultats? Il a une correspondance dans le tableau B sur la première colonne, mais ne correspond pas à la seconde.Vos données ne correspondent pas à votre explication.
Peut-être avons-nous besoin d'un site de pile pour aider aux devoirs
Vous avez dit "Comment exclure tous les enregistrements pour PUID du résultat lorsque A.PUID = B.EUID et A.PID <> B.LID". Voulez-vous vraiment exclure les enregistrements correspondant à cette condition ou inclure? Dans les deux cas, votre résultat attendu ne correspond pas. Veuillez modifier la question pour rendre la logique d'inclusion / exclusion claire et l'ensemble de résultats correspondant.
En quoi est-ce différent de vos deux questions précédentes: stackoverflow.com/questions/64794523/... et stackoverflow.com/questions/64815579/… , où vous n'avez accepté aucune réponse?