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 :

Besoin d'aide sur une requête


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Mars 2007
    Messages : 103
    Points : 66
    Points
    66
    Par défaut Besoin d'aide sur une requête
    Bonjour,

    J'ai besoin d'aide sur une requête:

    Voici ma table:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    table MATABLE
    | CHAMP1 | CHAMP2 |
    ---------------------
    | val1       |  0.5      |
    | val2       |  1.2      |
    | val3       |  0.2      |
    Ma requête: J'ai une liste de valeur pour le champs CHAMP1 et je veux récupérer à partir de cette liste les enregistrements qui une valeur inférieur à 1 pour le CHAMP2 ainsi que les valeur qui n'existe pas dans la table

    Exemple:
    J'ai trois valeurs de CHAMP1: val1, val2 et val4 après ma requête je veux récupérer comme valeur val1, val4

    J'ai essayé ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    select CHAMP1 from MATABLE 
    where (CHAMP2 < 1 or CHAMP2 is null) and 
    CHAMP1 in (val1,val2,val4)
    Je récupère bien mon val1 par contre il me manque mon val4.
    Je ne trouve pas de solution.
    Est ce que quelqu'un peut m'aider

  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 !

    En fait, le val4 n'est pas dans ta table ?
    ainsi que les valeur qui n'existe pas dans la table
    Ca veut dire qu'elles sont ailleurs ?
    => c'est là qu'il faudra les chercher...

    (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 du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Mars 2007
    Messages : 103
    Points : 66
    Points
    66
    Par défaut
    Oui elle sont ailleurs mais dans une autre base que celle qui contient MATABLE.

    Donc en fait pour exécuté ma requête j'ai comme paramètres d'entrée une liste de valeur de type CHAMP1. Et à partir de cette liste je ne récupère que les valeurs qui ne sont pas présentent dans la table ou qui remplisse la condition (CHAMP2 < 1).

    Il n'y a pas moyen d'afficher en plus des valeurs qui remplisse la condition celle qui ne sont pas présentent dans ma table?
    Si non je ferai une deuxième requête et je traiterai ceci avec le code

  4. #4
    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
    Quel est ton SGBD ?
    Si tu as la liste de valeurs, tu peux construire une "table" (dérivée) avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT listval.champ1
    FROM 
      (SELECT val1  as champ1 UNION ALL
       SELECT val2  as champ1 UNION ALL
       SELECT val4  as champ1) as listval
      LEFT OUTER JOIN TaTable b ON listval.champ1 = b.champ1
    WHERE (b.CHAMP2 < 1 OR b.CHAMP2 IS NULL)

    (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/

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Mars 2007
    Messages : 103
    Points : 66
    Points
    66
    Par défaut
    C'est oracle. Mais ma requête doit être au standard SQL.

    si j'ai beaucoup de valeurs pour CHAMP1, les select union ne risque t il pas d'être pénalisante.
    Il n'y a pas d'autres solutions?

  6. #6
    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
    Le risque principal est de claquer le shared pool.
    C'est peut être un peu mieux en utilisant les varrays :
    - Tu définis un type vecteur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SQL> create or replace type test_type as varray(100) of varchar(10)
      2  /
    Type créé.
    - Tu castes ta série de valeurs en un vecteur
    - Tu transformes ce vecteur en "expression de table"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    SQL> select column_value as champ1 from table(test_type('robert', 'marcel', 'jean-paul'))
      2  /
     
    CHAMP1
    ----------
    robert
    marcel
    jean-paul
    (Et bien sûr tu l'utilises ensuite comme dans l'exemple avec les UNION ALL)

    (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/

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

Discussions similaires

  1. [SQL] Besoin d'aide sur une requête
    Par moonboot dans le forum Oracle
    Réponses: 1
    Dernier message: 01/08/2006, 15h56
  2. besoin d'aide sur une requête mysql
    Par unmulot dans le forum Langage SQL
    Réponses: 5
    Dernier message: 07/07/2006, 13h17
  3. [SQL] Besoin d'aide sur une requête
    Par Angath dans le forum Langage SQL
    Réponses: 2
    Dernier message: 17/01/2006, 16h26
  4. Réponses: 1
    Dernier message: 03/08/2005, 11h41
  5. Besoin d'aide sur une requête (JOIN + COUNT ?)
    Par PanzerKunst dans le forum Langage SQL
    Réponses: 2
    Dernier message: 01/06/2005, 10h29

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