J'ai une table nommée BDS.cursuri, qui contient les colonnes "id_cadru", "tip_curs" . Exemple d'enregistrements:
J'ai essayé ceci:
id_cadru tip_curs
8 modul I
5 modul II
8 modul III
6 modul III
SELECT BDS.cursuri.ID_CADRU FROM BDS.cursuri,
(SELECT * FROM BDS.cursuri where TIP_CURS = "modul I") AS cu_m1
where BDS.cursuri.ID_CADRU NOT IN (cu_m1.ID_CADRU);
J'attends les sorties 5 et 6, c'est-à-dire les enregistrements qui n'ont pas tip_curs = 'module I ', car la personne avec id_cadru = 8 a déjà tip_curs =' modul I ', mais j'obtiens également la sortie 8. Comment puis-je résoudre ce problème ? Merci.
5 Réponses :
Nous pouvons essayer d'utiliser une clause EXISTS ici:
SELECT t1.id_cadru, t1.tip_curs
FROM BDS.cursuri t1
WHERE NOT EXISTS (SELECT 1 FROM BDS.cursuri t2
WHERE t1.id_cadru = t2.id_cadru AND t2.tip_curs = 'model I');
Vous devez utiliser le NOT IN dans la sous-requête pas dans la jointure
SELECT BDS.cursuri.ID_CADRU
FROM BDS.cursuri
where BDS.cursuri.ID_CADRU NOT IN (
SELECT id FROM BDS.cursuri where TIP_CURS = "modul I"
);
ou utiliser une clause not exist pour la même sous-requête
Essayez avec la requête ci-dessous
SELECT BDS.cursuri.ID_CADRU
FROM BDS.cursuri
where BDS.cursuri.ID_CADRU != (
SELECT ID_CADRU FROM BDS.cursuri where TIP_CURS = "modul I"
);
Essayez ceci,
Il renverra le id_cadru 5,6,8 avec modul II , modul III .
sélectionnez id_cadru, tip_curs de BDS.cursuri où id_cadru dans (sélectionnez distinct (id_cadru) de BDS.cursuri où tip_curs dans ('modul II ',' module III ')
Vous pouvez y parvenir en utilisant la requête suivante
CHOISIR * DE BDS.cursuri WHERE id_cadru NOT IN (SELECT id_cadru FROM BDS.cursuri WHERE
tip_curs= 'modul I') ANDtip_cursNOT IN ('module I')