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

Langage SQL Discussion :

Clés inexistantes dans une table


Sujet :

Langage SQL

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2007
    Messages
    162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Mars 2007
    Messages : 162
    Points : 90
    Points
    90
    Par défaut Clés inexistantes dans une table
    Bonjour,

    Je cale sur un problème sans doute simple, mais je n'y parviens pas...

    Dans un traitement de masse, je reçois une liste de clés d'une table. Il m'est demandé de remonter les clés inexistantes.

    Pour faire simple, j'ai table T dont la colonne des clés est classiquement OID.

    Un fichier est produit, il s'agit d'une simple colonne avec a, b et c pour valeurs, en admettant que c est inexistante.

    J'ai donc crée la requête suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    SELECT OID FROM T
    WHERE
    OID in ('a', 'b', 'c') and
    OID not in (
    	SELECT OID FROM T
    	WHERE
    	OID in ('a', 'b', 'c')
    	)
    Ça ne me remonte rien. J'ai cherché sur le forum, j'ai trouvé les commandes MINUS, EXISTS et autres, mais je n'y arrive vraiment pas.

    Un petit coup de main serait le bienvenu, pour lequel je vous remercie par avance.

  2. #2
    Membre actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2011
    Messages : 146
    Points : 263
    Points
    263
    Par défaut
    Bonjour ,


    Je pense que ta requête ne retournera jamais rien :

    Sélectionne moi les OID parmi a, b ,c mais qui ne sont pas a, b ou c


    En fait si j'ai bien compris , ce serait plutôt dans ce style :

    parmi la liste a,b,c dis moi quelles sont les valeurs absentes de la table T ?
    Cordialement.

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2007
    Messages
    162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Mars 2007
    Messages : 162
    Points : 90
    Points
    90
    Par défaut
    Citation Envoyé par ORA-007 Voir le message
    Bonjour ,

    En fait si j'ai bien compris , ce serait plutot dans ce style :

    parmis la liste a,b,c dit moi quelles sont les valeurs absentes de la table T ?
    Bonjour,

    Oui, tu as très bien compris. Le tout est de trouver les OID inexistants parmi la liste.

  4. #4
    Membre actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2011
    Messages : 146
    Points : 263
    Points
    263
    Par défaut
    Le plus simple sera d'exploiter ton fichier sous forme de table :

    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
     
    WITH LISTE AS
    (
    SELECT 'a' as OID FROM DUAL UNION ALL
    SELECT 'b' as OID FROM DUAL UNION ALL
    SELECT 'c' as OID FROM DUAL 
    ), T AS
    (
    SELECT 'a' as OID FROM DUAL UNION ALL
    SELECT 'b' as OID FROM DUAL 
    )
    SELECT LISTE.OID
    FROM   LISTE LEFT OUTER JOIN T ON LISTE.OID = T.OID
    WHERE  1=1
    AND    T.OID IS NULL
    Cordialement.

  5. #5
    Membre régulier
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2007
    Messages
    162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Mars 2007
    Messages : 162
    Points : 90
    Points
    90
    Par défaut
    Merci pour cette requête. Cependant, pourquoi 'c' n'apparaît pas dans la partie suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    T AS
    (
    SELECT 'a' AS OID FROM DUAL UNION ALL
    SELECT 'b' AS OID FROM DUAL 
    )

  6. #6
    Membre expérimenté
    Avatar de islamov2000
    Homme Profil pro
    Ingénieur d'études & developpement en informatique
    Inscrit en
    Septembre 2007
    Messages
    814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur d'études & developpement en informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2007
    Messages : 814
    Points : 1 717
    Points
    1 717
    Billets dans le blog
    6
    Par défaut
    Citation Envoyé par DomIII Voir le message
    Bonjour,


    J'ai donc crée la requête suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    SELECT OID FROM T
    WHERE
    OID in ('a', 'b', 'c') and
    OID not in (
    	SELECT OID FROM T
    	WHERE
    	OID in ('a', 'b', 'c')
    	)
    c'est tout à fait normal; tu as une contradiction dans ta requete le IN et NOT IN
    d'avoir Pensé à voter positivement pour ceux qui vous ont aidés et surtout à mettre si le cas.
    ça encourage.

  7. #7
    Membre actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2011
    Messages : 146
    Points : 263
    Points
    263
    Par défaut
    Merci pour cette requête. Cependant, pourquoi 'c' n'apparaît pas dans la partie suivante :

    Le but était bien de recupérer les OID dans la liste et pas dans la table T non ?

    Il me fallait bien générer un exemple.
    Cordialement.

  8. #8
    Membre régulier
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2007
    Messages
    162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Mars 2007
    Messages : 162
    Points : 90
    Points
    90
    Par défaut
    Citation Envoyé par ORA-007 Voir le message
    Le but était bien de recupérer les OID dans la liste et pas dans la table T non ?

    Il me fallait bien générer un exemple.
    Mais bien sûr !

    Bon, je vais tester sur un échantillon de 100 OIDs, je reviens un peu plus tard pour donner les résultats.

  9. #9
    Membre actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2011
    Messages : 146
    Points : 263
    Points
    263
    Par défaut
    AU fait quel SGBD tu utilises ?
    Cordialement.

  10. #10
    Membre régulier
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2007
    Messages
    162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Mars 2007
    Messages : 162
    Points : 90
    Points
    90
    Par défaut
    Oracle 10.2

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

Discussions similaires

  1. [Normalisation] Plusieurs clés étrangères dans une table
    Par insane_80 dans le forum Schéma
    Réponses: 13
    Dernier message: 21/11/2014, 21h40
  2. Réponses: 1
    Dernier message: 20/05/2008, 18h08
  3. Problème avec Insert dans une table contenant deux clés
    Par pure_blue dans le forum Accès aux données
    Réponses: 5
    Dernier message: 23/10/2006, 19h32
  4. Mots clés dans une table sql
    Par vince_grenoblois dans le forum Langage SQL
    Réponses: 1
    Dernier message: 01/08/2006, 14h21
  5. Comment avoir 2 clés primaires dans une table
    Par Guigui_ dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 18/01/2005, 08h29

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