IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQL Oracle Discussion :

Help : NOT in SQL


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de LBO72
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    406
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 406
    Par défaut Help : NOT in SQL
    Bonjour,

    (je suis en oracle 10GR2)

    Je me suis heurté à un problème pour la première fois et je voudrai vous en faire part et avoir votre avis.

    J'ai créé un table : Create table toto (nn number);
    insert into toto values(11);
    commit;

    Create table titi (nn number);
    insert into titi values(NULL);
    insert into titi values(12);
    commit;

    En lançant la requête ci-dessous, il ne me ramène rien !!!

    Select * from toto where nn not in (select nn from titi);

    Je suis perdu....


    Cdlt,
    LBO72

  2. #2
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    Piége classique du IN ou NOT IN avec des valeurs NULL. En effet, si l'ensemble contient NULL alors NOT IN ne renvoie aucune ligne : http://asktom.oracle.com/pls/asktom/...d:442029737684

    NULL ne pouvant pas être évalué, Oracle ne peux pas évalué le contenu du sous-ensemble et la condition NOT IN est donc toujours faute.

    Il faut remplacer NOT IN par NOT EXISTS ou exclure les lignes NULL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SQL> Select * from toto where nn not in (select nn from titi where nn is not null);
     
            NN
    ----------
            11
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SQL> Select * from toto where not exists (select 1 from titi where titi.nn=toto.nn);
     
            NN
    ----------
            11

  3. #3
    Membre éclairé Avatar de LBO72
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    406
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 406
    Par défaut
    Merci grand maitre OraFrance pour ces précisions :-).

    On apprend toujours sur ce formidable site.


    LBO72.

  4. #4
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    Faut bien que je serve à quelque chose de temps en temps

  5. #5
    Membre éclairé Avatar de LBO72
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    406
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 406
    Par défaut
    Je me permettrai juste une petite précision au Grand maitre que tu es :-)

    J'ai essayé avec le IN, et ça marche. Mais pas avec le NOT IN

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    LDEV)>select * from toto;
            NN
    ----------
            12
    
    2 rows selected.
    
    DEV)>select * from titi
    
    1 row selected.
    
    DEV>select * from toto where nn in (select nn from titi);
    
            NN
    ----------
            12
    
    1 row selected.
    
    DEV1)>
    Merci encore de tes lumères.

    Cdlt,
    LBO72

  6. #6
    Membre éclairé Avatar de LBO72
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    406
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 406
    Par défaut
    Je suis désolé, je me suis trompé dans le copier/coller :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    DEV1)>select * from toto;
    
            NN
    ----------
            12
    
    1 row selected.
    
    DEV1)>select * from titi;
    
            NN
    ----------
            12
    
    
    2 rows selected.
    
    DEV1)>select * from toto where nn in(select * from titi);
    
            NN
    ----------
            12
    
    1 row selected.
    
    DEV1)>
    Cdlt,
    LBO72.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Help sur linq sql
    Par alves.seb dans le forum Accès aux données
    Réponses: 6
    Dernier message: 28/08/2008, 16h16
  2. dbo or not dbo - SQL SERVER
    Par davibe dans le forum VBA Access
    Réponses: 5
    Dernier message: 25/08/2008, 10h04
  3. Help ! Communication Cobol - SQL Server
    Par bobbyO dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 15/04/2007, 22h11
  4. Help!! Probleme avec les dates sur SQL SERVER
    Par Nadaa dans le forum MS SQL Server
    Réponses: 16
    Dernier message: 03/08/2006, 16h55
  5. SQL-DMO Help
    Par agodinasandrien dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 20/10/2003, 09h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo