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 :

Problème requête qui renvoie plusieurs


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Inscrit en
    Février 2004
    Messages
    148
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 148
    Points : 59
    Points
    59
    Par défaut Problème requête qui renvoie plusieurs
    BOnjour,

    J'aimerai faire inserer dans un table les valeurs de la différence de deux autres tables. J'ai procédé comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    insert into temp(LIBL,CODE,D_OUV,D_FER) 
    (select  LIBELLE,CODE_MEF,Date_Ouverture,Date_Fermeture from ME where code_mef=(select code_mef from ME
    MINUS
    select code_mef from dipl))
    mais j'ai une erreur il me dit

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ERREUR à la ligne 1 :
    ORA-01427: single-row subquery returns more than one row
    J'ai compris l'erreur mais comment la corrigé?


    Merci

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut Re: Problème requête qui renvoie plusieurs
    Remplace

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    where code_mef=(select code_mef from ME
    Par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    where code_mef IN (select code_mef from ME

  3. #3
    Membre du Club
    Inscrit en
    Février 2004
    Messages
    148
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 148
    Points : 59
    Points
    59
    Par défaut
    Merci ca marche.
    Quel est la difference entre les 2?

  4. #4
    Membre averti
    Avatar de Superstivix
    Inscrit en
    Décembre 2003
    Messages
    250
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 250
    Points : 405
    Points
    405
    Par défaut
    La différence entre les 2 est que :

    1) dans le premier cas tu as un WHERE normal sauf que tu remplace un des membres de l'égalité par une requête donc pour que ce soit valide il faut que ta requete ne revoit qu'un seul résultat

    2) Dans ce cas là, tu vas chercher parmi l'ensemble des résultats de ta requete si la valeur code_mef est présente. Ainsi si le code_mef de la première requete est se trouve dans les resultats de la sesonde tu aura un résultat

    Steve
    Modérateur Taverne et C++Builder
    Règles du Club - Règles de la Taverne
    FAQ BCB - sources
    Et je mords

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    J'ai une proposition à te faire pour améliorer la requête aussi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select  LIBELLE,CODE_MEF,Date_Ouverture,Date_Fermeture from ME where code_mef IN (select code_mef from ME )
    and not exists ( select 1 from dipl where code_mef=ME.code_mef)
    Le MINUS n'est pas super, là tu n'afficheras que les lignes pour lesquels le code_mef n'est pas dans la table dipl ce qui semble être ton souhait

    En revanche ton IN ne sert absolument à rien, tu sélectionnes les lignes de ME ou code_mef = code_mef... c'est complétement inutile ou alors il y a une erreur dans le nom des tables

  6. #6
    Membre du Club
    Inscrit en
    Février 2004
    Messages
    148
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 148
    Points : 59
    Points
    59
    Par défaut
    Slt,

    Je ne comprends pas à quoi corerespond ton 1 dans le select du dernier select, pourquoi ne pas faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select  LIBELLE,CODE_MEF,Date_Ouverture,Date_Fermeture from ME where code_mef not exists ( select code_mef from dipl )
    qu'en pense tu

    A+

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    le 1 c'est juste pour mettre une valeur, ce qui est important c'est pas ce qu'on sélectionne mais est-ce qu'une ligne existe

    WHERE col NOT EXISTS est incorrect

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

Discussions similaires

  1. Une requête en JOINTURE qui renvoi plusieurs arrays
    Par Magnat dans le forum Requêtes
    Réponses: 7
    Dernier message: 10/05/2010, 23h03
  2. [SQL] Multiplication après requête qui donne plusieurs données en résultats
    Par Yagami_Raito dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 04/06/2007, 11h34
  3. [Système] Fonction qui renvoie plusieurs valeurs
    Par sebhm dans le forum Langage
    Réponses: 6
    Dernier message: 26/01/2007, 08h43
  4. Réponses: 2
    Dernier message: 09/01/2006, 19h45
  5. Réponses: 31
    Dernier message: 25/10/2005, 18h26

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