0
votes

Comment exclure tous les enregistrements pour PUID du résultat lorsque A.PUID = B.EUID et A.PID <> B.LID

Comment exclure tous les enregistrements pour PUID du résultat lorsque A.PUID = B.EUID et A.PID <> B.LID

Tableaux et résultats attendus joints ici

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


5 commentaires

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?


3 Réponses :


0
votes

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


0 commentaires

0
votes

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


0 commentaires

0
votes

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 <>.


0 commentaires