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 :

Bug SQL sous Oracle


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juillet 2011
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Juillet 2011
    Messages : 12
    Par défaut Bug SQL sous Oracle
    Bonjour,

    j'ai une question qui va peut etre vous paraitre un peu simplette mais je débutes et je n'arrive pas a voir comment il faut faire.

    J'ai une table INSTALLER avec plusieurs colonnes dont NOMPOSTE et NOMLOGICIEL

    La question est la suivante:
    "Donner le nom des postes, qui ont les mêmes logiciels que le poste 'AC1' "

    La réponse que je vois en SQL est la suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT DISTINCT i1.nomPoste
    FROM INSTALLER i1
    WHERE i1.nomPoste <> 'AC1'
    AND NOT EXISTS
    (SELECT i2.nomLogiciel FROM INSTALLER i2 WHERE i2.nomPoste = 'AC1')
    MINUS
    (SELECT i3.nomLogiciel FROM INSTALLER i3 WHERE i3.nomPoste = i1.nomPoste);
    Quand je compile ça sous SQLPlus il me met une erreur,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    (SELECT i3.nomLogiciel FROM INSTALLER i3 WHERE i3.nomPoste = i1.nomPoste)
     
    (étoile en dessous de i1)
    Erreur à la ligne 6
    ORA-00904: "I1" . "NOMPOSTE": identificateur non valide
    Il semblerait que il n'arrive pas a voir de quel Installer je parles, mais je ne vois pas comment faire autrement?

    Merci de l'aide!

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Vous avez un petit problème de parenthèse je pense, essayez ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT DISTINCT i1.nomPoste
      FROM INSTALLER i1
     WHERE i1.nomPoste <> 'AC1'
       AND NOT EXISTS (SELECT i2.nomLogiciel FROM INSTALLER i2 WHERE i2.nomPoste = 'AC1'
                        MINUS
                       SELECT i3.nomLogiciel FROM INSTALLER i3 WHERE i3.nomPoste = i1.nomPoste);

  3. #3
    Membre averti
    Inscrit en
    Juillet 2011
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Juillet 2011
    Messages : 12
    Par défaut
    En effet, c'est cela, et il s'agit de la réponse attendue. Merci!

    Juste pour aller plus loin,c'est bien la bonne méthode que j'ai employé, y'a pas moyen de faire plus rapide, plus optimisé et plus simple?

  4. #4
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Je n'avais pas lu le besoin initial, j'ai juste regardé la requête.

    Vous avez raison d'y revenir car le MINUS n'opère que dans un sens.
    Vous ne couvrez pas les postes qui ont tous les logiciels de AC1 mais qui en ont en plus. Que faut-il faire de ceux là ?

  5. #5
    Membre averti
    Inscrit en
    Juillet 2011
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Juillet 2011
    Messages : 12
    Par défaut
    Oui, c'est bien la question: on nous demande pas "exactement" les mêmes logiciels

    La question suivante justement la pose: "Donner le nom des postes, qui ont exactement les mêmes logiciels que le poste 'AC1' ".

    Dans ce cas la, il faut aussi rajouter la clause inverse dans le WHERE? :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
    SELECT DISTINCT i1.nomPoste
    FROM INSTALLER i1
    WHERE i1.nomPoste <> 'AC1'
    AND NOT EXISTS
    (SELECT i2.nomLogiciel FROM INSTALLER i2 WHERE i2.nomPoste = 'AC1'
    MINUS
    SELECT i3.nomLogiciel FROM INSTALLER i3 WHERE i3.nomPoste = i1.nomPoste)
    AND NOT EXISTS
    (SELECT i4.nomLogiciel FROM INSTALLER i4 WHERE i4.nomPoste = i1.nomPoste
    MINUS
    SELECT i5.nomLogiciel FROM INSTALLER i5 WHERE i5.nomPoste = 'AC1');
    Logiquement ainsi c'est bon n'est-ce pas? Mais c'est un peu lourd je trouve, n'y a t-il pas un moyen plus simple?

  6. #6
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Oui logiquement c'est correct.
    Il y a plusieurs solutions à ce problème, celle que vous avez écrite peut paraître sémantiquement lourde mais est efficace.

    Vous pouvez utiliser les collections en suivant ces exemples de mnitu :
    http://www.developpez.net/forums/d12...relationnelle/

Discussions similaires

  1. Faire un host echo dans un fichier en sql sous oracle
    Par NouWaT dans le forum Sql*Plus
    Réponses: 2
    Dernier message: 04/06/2007, 15h32
  2. probleme requete sql sous oracle 8
    Par bouclette dans le forum Oracle
    Réponses: 4
    Dernier message: 06/12/2006, 17h04
  3. Optimisation de requetes SQL sous oracle
    Par santana2006 dans le forum Oracle
    Réponses: 5
    Dernier message: 28/08/2006, 19h26
  4. Réponses: 4
    Dernier message: 18/01/2006, 10h33
  5. comment installer initjvm.sql sous Oracle 8i
    Par c_moi_c_moi dans le forum Oracle
    Réponses: 1
    Dernier message: 04/11/2005, 12h19

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