Précédent   Forum des professionnels en informatique > Bases de données > Langage SQL
Langage SQL Forum d'entraide sur le langage SQL et sur les questions liées à la conception de schéma (DDL). Cours SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 04/01/2012, 12h19   #1
Nouveau Membre du Club
 
Femme Anna
Développeur Java
Inscription : mai 2010
Messages : 105
Détails du profil
Informations personnelles :
Nom : Femme Anna
Âge : 25
Localisation : France

Informations professionnelles :
Activité : Développeur Java
Secteur : Conseil

Informations forums :
Inscription : mai 2010
Messages : 105
Points : 33
Points : 33
Par défaut Requêtes similaires ne donnant pas le même résultat

Bonjour!

Je rencontre une chose curieuse en SQL:
La requête suivante ne donne aucun résultat:
Code :
1
2
SELECT * FROM T_NANFR 
WHERE T_NANFR.NAN_ID_N NOT IN (SELECT T_STATION_FIXE.NAN_ID_N FROM T_STATION_FIXE)
NAN_ID_N est la clé primaire de T_NANFR et elle est une FK dans T_STATION_FIXE

En revanche cette requête (qui est la même):
Code :
1
2
3
 
SELECT * FROM T_NANFR 
WHERE T_NANFR.NAN_ID_N NOT IN (SELECT T_NANFR.NAN_ID_N FROM  T_NANFR WHERE T_NANFR.NAN_ID_N IN (SELECT T_STATION_FIXE.NAN_ID_N FROM T_STATION_FIXE))
retourne 2000 résultats environ...

Je ne comprends pas pourquoi la première requête n'a pas fonctionné...

Auriez-vous svp une explication à cela?
Annsen est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2012, 12h32   #2
Membre Expert
 
Avatar de lola06
 
Femme Laure
Consultante en Business Intelligence
Inscription : avril 2007
Messages : 983
Détails du profil
Informations personnelles :
Nom : Femme Laure
Âge : 25
Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Consultante en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : avril 2007
Messages : 983
Points : 1 693
Points : 1 693
Bonjour,

La colonne NAN_ID_N qui est clé étrangère ne contient pas forcément toutes les valeurs contenues en tant que clé primaire.

Un exemple pour concretiser ça :

Table T_NANFR
Code :
1
2
3
4
5
6
NAN_ID_N | libelle
1        | rouge
2        | bleu
3        | jaune
4        | rose
5        | vert
Table T_STATION_FIXE
Code :
1
2
3
4
5
6
7
8
 
Nom | NAN_ID_N
a   | 1
b   | 1
c   | 2
d   | 5
e   | 4
f   | 4
Ainsi ta première requête ne te renverra pas le même résultat que la deuxième car NAN_ID_N = 3 n'apparait pas en tant que clé étrangère.
Donc tes requêtes ne sont pas les mêmes.

Tu devrais essayer de remplacer tes IN et NOT IN par des jointures...
__________________
~ Lola ~

Ne pas oublier :
et aussi :
lola06 est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 04/01/2012, 13h22   #3
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 686
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 686
Points : 10 435
Points : 10 435
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
Vous avez probablement des valeurs nulles dans votre liste.
Essayez ainsi :
Code :
1
2
3
4
5
SELECT *
  FROM T_NANFR 
 WHERE NAN_ID_N NOT IN (SELECT NAN_ID_N
                          FROM T_STATION_FIXE
                         WHERE NAN_ID_N IS NOT NULL)
Ou encore :
Code :
1
2
3
4
5
SELECT *
  FROM T_NANFR
 WHERE NOT EXISTS (SELECT NULL
                     FROM T_STATION_FIXE
                    WHERE T_STATION_FIXE.NAN_ID_N = T_NANFR.NAN_ID_N)
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 04/01/2012, 14h25   #4
Nouveau Membre du Club
 
Femme Anna
Développeur Java
Inscription : mai 2010
Messages : 105
Détails du profil
Informations personnelles :
Nom : Femme Anna
Âge : 25
Localisation : France

Informations professionnelles :
Activité : Développeur Java
Secteur : Conseil

Informations forums :
Inscription : mai 2010
Messages : 105
Points : 33
Points : 33
Je vous remercie Waldar!
La première requête avec l'ajout du "not null" fonctionne maintenant!

Je te remercie Lola mais c'était bien deux fois la même requête que j'avais écrit:
L'objectif des deux requêtes était de récupérer dans la liste justement complète de la primary key les éléments qui ne sont pas dans la Foreign Key de T_STATION_FIXE (les éléments non liés à des éléments fils).
Annsen est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h32.


 
 
 
 
Partenaires

Hébergement Web