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

PL/SQL Oracle Discussion :

Suppression de champs d'une 1ère colonne si l'on trouve une valeur précise dans une 2ème colonne [11g]


Sujet :

PL/SQL Oracle

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 24
    Points : 20
    Points
    20
    Par défaut Suppression de champs d'une 1ère colonne si l'on trouve une valeur précise dans une 2ème colonne
    Bonjour,

    Après maintes recherches sur le net, je n'ai pas trouvé de réponse collant avec mon problème. Je vous expose ce que je voudrais faire.
    J'obtiens par le biais d'une requête ce type de résultat :
    (tous les champ1 ont la même valeur, idem pour champ2 ...)

    Colonne1 | Colonne2
    ___________________
    champ1 | valeur1
    champ1 | valeur2
    champ1 | X
    champ2 | valeur3
    champ2 | valeur4
    champ2 | valeur5
    champ2 | X
    champ3 | valeur6
    champ3 | valeur7

    Je voudrais alors faire ceci en SQL :
    Pour toute même valeur de la 1ère colonne,
    Si l'on trouve une valeur dans la 2ème colonne égale à 'X'
    Alors on supprime toutes les lignes correspondantes.

    Si l'on suit l'exemple précédent, il ne me resterais après traitement que les résultats suivants :
    Colonne1 | Colonne2
    ___________________
    champ3 | valeur6
    champ3 | valeur7

    Voilà, je reste disponible si vous souhaites des informations supplémentaires.
    Merci d'avance.

  2. #2
    Membre émérite Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Points : 2 845
    Points
    2 845
    Par défaut
    Salut,

    Essaie avec une sous-requête NOT EXISTS par exemple.

    (c'est ma photo)
    Paku, Paku !
    Pour les jeunes incultes : non, je ne suis pas un pokémon...

    Le pacblog : http://pacmann.over-blog.com/

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 24
    Points : 20
    Points
    20
    Par défaut
    Merci de ta réponse PACMANN, je suis allé chercher du côté de NOT EXISTS, voici la requête utilisée toujours pas rapport à l'exemple précédent :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT *
    FROM matable
    WHERE NOT EXISTS (SELECT * FROM matable WHERE colonne2<>'X')
    Malheureusement, je n'obtiens aucun résultat à cette requête (mais aucune erreur).
    Je vais continuer à chercher de ce côté, je reste à votre écoute ...

  4. #4
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,

    C'est normal, vous demandez de supprimer les lignes lorsque qu'il n'existe aucune ligne dans la table dont la colonne2 est différent 'X'
    il faut corréler avec la valeur de la colonne 1 :

    En français, ça donne :
    "Quelles sont les lignes de la table pour lesquelles il existe une ligne ayant la même valeur pour la colonne 1 et dont la colonne 2 contient X"
    Ce qui se traduit en SQL par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    SELECT *
    FROM matable A
    WHERE EXISTS (
        SELECT * 
        FROM matable B
        WHERE b.Colonne1 = A.Colonne1
         AND   B.colonne2='X'
    )

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 24
    Points : 20
    Points
    20
    Par défaut
    Impeccable cela marche à merveille.
    Cette requête me donne tous les résultats à supprimer dans la table.
    J'ai donc juste rajouter un DELETE en tenant compte de cette requête et j'obtiens les résultats que j'attendais.
    Encore merci aieeeuuuuu pour le coup de main.
    Merci aussi à pacmann.

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

Discussions similaires

  1. Réponses: 12
    Dernier message: 20/03/2015, 10h27
  2. Réponses: 5
    Dernier message: 12/03/2015, 16h32
  3. [Débutant] trouver une valeur précise dans une matrice
    Par lloyd_r dans le forum MATLAB
    Réponses: 8
    Dernier message: 05/06/2009, 16h55
  4. Rechercher une valeur précise dans une table
    Par tonton54 dans le forum MySQL
    Réponses: 5
    Dernier message: 28/10/2008, 15h58
  5. Nombre de valeurs différentes dans une colonne
    Par KrusK dans le forum Langage SQL
    Réponses: 4
    Dernier message: 24/08/2005, 14h18

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