0
votes

Sélectionnez une déclaration avec les opérateurs qui ne fonctionnent pas

J'ai ces deux tables et j'ai besoin d'une requête, qui génère chaque membre qui a le lvnr 050056 fort> et non 050054 strong>.

J'ai ces deux tables

 Entrez la description de l'image ici p>

Je l'ai essayé avec la requête suivante, mais cela ne fonctionne pas correctement: p>

SELECT s.matrnr, s.vorname, s.nachname
FROM student s
INNER JOIN  teilgenommen t ON s.matrnr = t.matrnr
WHERE (t.lvnr = 050056) AND (t.lvnr != 050054)

sql

0 commentaires

3 Réponses :


2
votes

Utiliser existe et n'existe pas : xxx

Les principaux zéros suggèrent que lvnr est vraiment stocké comme une chaîne. Si tel est le cas, des citations simples doivent être utilisées pour la valeur de comparaison.


0 commentaires

0
votes

Vous pouvez faire:

SELECT 
   s.matrnr, 
   s.vorname, 
   s.nachname
FROM 
   student s
INNER JOIN  
   (
      select 
         matrnr, 
         max(case when lvnr='050056' then 1 else 0 end) as a, 
         max(case when lvnr='050054' then 1 else 0 end) as b 
      from 
         teilgenommen 
      group by 
         matrnr 
      having a=1 and b=0
   ) t
ON s.matrnr = t.matrnr


0 commentaires

0
votes

Ceci peut également être résolu avec agrégation et une clause pour filtrer: xxx


0 commentaires