J'essaie de créer une requête qui sélectionne des lignes en fonction d'une valeur de répétition dans une colonne
Select * From Table Where Type != 'ACD'
Je souhaite uniquement sélectionner les lignes qui ont une Record_Key de AED qui n'ont pas de ACD associé à cette Record_Key.
Donc, dans mon exemple fourni, voulez sélectionner Ligne 3 et Ligne 4 .
Je ne peux pas dire:
Row 1: Row 2: Row 3: Row 4: Record_Key = 1 Record_Key = 1 Record_Key = 2 Record_Key = 3 Type = 'AED' Type = 'ACD' Type = 'AED' Type = 'AED'
parce que cela renverrait Ligne 1 , Ligne 3 et Ligne 4 quand je veux seulement Ligne 3 et Ligne 4 . Je ne peux pas comprendre la structuration de cette requête, ou est-ce que SQL et ma table fournie ne permettent pas ce type de sélection?
3 Réponses :
Vous pouvez utiliser n'existe pas :
select t.*
from table t
where t.type = 'AED' and
not exists (select 1 from table t1 where t1.record_key = t.record_key and t1.type = 'ACD');
l'utilisation n'existe pas
Record_Key Type 2 AED 3 AED
sortie
select t1.* from tab t1
where not exists ( select 1 from tab t2 where t1.Record_Key=t2.Record_Key
and type='ACD')
Il n'y a qu'une seule table
@Josh oui je n'ai utilisé qu'une seule table
@Josh dbfiddle.uk/… vérifiez ce lien pour votre sortie
Vous pouvez grouper par clé_enregistrement et ne conserver que les clé_enregistrement dont le seul type existant est 'AED' :
select record_key, max(type) type
from tab
where type in ('AED', 'ACD')
group by record_key
having min(type) = 'AED' and max(type) = 'AED'
WHERE Type = 'AED' AND NOT EXISTS (...) Cette question a été posée et répondue plusieurs fois, mais c'est un scénario difficile à rechercher.