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 :

Résultats dans une même colonne.


Sujet :

Langage SQL

  1. #1
    Membre habitué Avatar de souellet
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    155
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2003
    Messages : 155
    Points : 171
    Points
    171
    Par défaut Résultats dans une même colonne.
    Bonjour à tous.

    J'ai 3 tables, ma table primaire, une chauffeur et l'autre transporteur.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    CREATE TABLE TABLE_PRIM 
      (NO_NO DECIMAL (5 ))
     
    INSERT INTO TABLE_PRIM (NO_NO) 
    VALUES (100) 
     
    INSERT INTO TABLE_PRIM (NO_NO) 
    VALUES (200)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CREATE TABLE CHAUFFEUR 
      (NO_CHAUFFEUR DECIMAL (5 ), 
       NOM_CHAUFFEUR CHAR (30 ))
     
    INSERT INTO CHAUFFEUR (NO_CHAUFFEUR,NOM_CHAUFFEUR) 
    VALUES (100,'CHAUFFEUR 100')
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CREATE TABLE TRANSPORT 
      (NO_TRANSPORT DECIMAL (5 ), 
       NOM_TRANSPORT CHAR (30 ))
     
    INSERT INTO TRANSPORT (NO_TRANSPORT,NOM_TRANSPORT) 
    VALUES (200,'CHAUFFEUR 200')
    Dans ma requête, je veux vérifier si le numéro de chauffeur existe dans la première table sinon je prend le nom dans la deuxième.

    Actuellement ma requête ressemble à ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT
    (SELECT NOM_CHAUFFEUR FROM CHAUFFEUR WHERE NO= NO_CHAUFFEUR),  
    (SELECT NOM_TRANSPORT FROM TRANSPORT WHERE NO= NO_TRANSPORT)
    FROM TABLE_PRIM
    Je voudrais le résultat dans la même colonne en évitant le union.

    Merci à l'avance!

  2. #2
    in
    in est déconnecté
    Membre expérimenté Avatar de in
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 612
    Points : 1 718
    Points
    1 718
    Par défaut
    peut etre avec OR au lieu de 2 SELECT
    "If email had been around before the telephone was invented, people would have said, 'Hey, forget email! With this new telephone invention I can actually talk to people!"

    Besoin d'une nouvelle méthode pour développer ? -> http://www.la-rache.com/

  3. #3
    Membre actif
    Avatar de MashiMaro
    Profil pro
    Inscrit en
    Février 2003
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 180
    Points : 213
    Points
    213
    Par défaut
    Pourquoi eviter le UNION ? Tu peux passer par une table temporaire alors.

    PS : merci de mettre en conformité ton titre avec les règles du forum
    MashiMaro

    L'homme sage apprend de ses erreurs, l'homme très sage apprend des erreurs des autres.

  4. #4
    Membre habitué Avatar de souellet
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    155
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2003
    Messages : 155
    Points : 171
    Points
    171
    Par défaut
    OR? Je vois pas comment on peut faire ça?

    Pour le union;
    Dans les faits, ma requête est beaucoup plus lourde que l'exemple.
    Rajouter un union ferait perdre encore plus de performance.

    Autre suggestion?

  5. #5
    in
    in est déconnecté
    Membre expérimenté Avatar de in
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 612
    Points : 1 718
    Points
    1 718
    Par défaut
    ben avec le OR

    SELECT NOM_CHAUFFEUR, NOM_TRANSPORT
    FROM CHAUFFEUR,TRANSPORT
    WHERE NO= NO_CHAUFFEUR
    OR NO= NO_TRANSPORT

    ou

    WHERE NO IN (NO_CHAUFFEUR, NO_TRANSPORT)

    Enfin, je sais pas, c'est ptete pas ce que tu veux ...

    pas besoin de faire 3 SELECT, c'est plutot ça qui ralentirai tout ...
    "If email had been around before the telephone was invented, people would have said, 'Hey, forget email! With this new telephone invention I can actually talk to people!"

    Besoin d'une nouvelle méthode pour développer ? -> http://www.la-rache.com/

  6. #6
    Membre habitué Avatar de souellet
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    155
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2003
    Messages : 155
    Points : 171
    Points
    171
    Par défaut
    J'ai essayé ton OR et ça ne fonctionne pas.

    Le but ultime est de mettre le résultat du select chauffeur et transport dans la même colonne en utilisant le requête la plus performante.

    En passant oubli pas de mettre ton code entre balise.

    Merci pour l'essai.

  7. #7
    Membre habitué Avatar de souellet
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    155
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2003
    Messages : 155
    Points : 171
    Points
    171
    Par défaut
    La meilleur solution trouvé par un de mes collègues est la suivante.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT
    CASE 
    WHEN NOM_CHAUFFEUR IS NULL THEN NOM_TRANSPORT
    ELSE NOM_CHAUFFEUR
    END
    FROM TABLE_PRIM
    LEFT JOIN CHAUFFEUR ON (NO_CHAUFFEUR =NO_NO)
    LEFT JOIN TRANSPORT ON (NO_TRANSPORT =NO_NO)
    La barre est haute!

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

Discussions similaires

  1. GroupBy 2 résultat sur une même colonne
    Par defcon_suny dans le forum Requêtes
    Réponses: 2
    Dernier message: 19/06/2010, 08h34
  2. Réponses: 4
    Dernier message: 18/12/2009, 13h44
  3. [MySQL] Permutation de deux valeurs dans une même colonne de table
    Par andry.aime dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 16/01/2009, 13h19
  4. [BO XI] Variable différente dans une même colonne
    Par FloLens dans le forum Deski
    Réponses: 6
    Dernier message: 16/04/2008, 16h36
  5. Plusieurs résultats dans une même cellule
    Par luboyoyo dans le forum Excel
    Réponses: 2
    Dernier message: 04/06/2007, 08h39

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