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

Requêtes MySQL Discussion :

union de deux requetes


Sujet :

Requêtes MySQL

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 4
    Par défaut union de deux requetes
    Bonjour,
    J'ai deux requêtes associées à une même ressource, que je souhaiterai unir quitte à avoir des valeurs NULL.
    -Les nombres de champs résultants de ces requêtes sont différents.

    Pour illustrer:

    select étiquettes vierges:
    -> id_echantillon, id_client

    select étiquettes attachées à un lot:
    -> id_echantillon, id_client, id_lot

    Je souhaiterai unir les relations, de façon à avoir une liste d'étiquettes, dont certaines avec un champ null pour id_lot


    Plus précisément, voici mes requêtes de la vraie vie:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT 	e.id_echantillon,
    		c.company,
     		e.str_cl_echantillon,
     		e.nb_print
     
     		FROM ps_eur_echantillon e
     		JOIN ps_eur_demande d
     		ON e.id_demande=d.id_demande
     		JOIN ps_customer c
     		ON d.id_customer=c.id_customer
     		WHERE e.etat IS NOT NULL and d.id_customer=1;
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    SELECT 	e.id_echantillon,
    		v.nom_variete,
     		c.company,
     		p.nom_producteur,
    		l.nom_lot,
     		e.str_cl_echantillon,
     		e.nb_print,
     		l.str_cl_lot
     
     		FROM ps_customer c
     		JOIN ps_eur_demande d
     		ON c.id_customer=d.id_customer
     		JOIN ps_eur_echantillon e
    		ON e.id_demande=d.id_demande
    		JOIN ps_eur_lot l
    		ON e.id_lot=l.id_lot
    		JOIN ps_eur_producteur p
     		ON p.id_producteur=l.id_producteur
     		JOIN ps_eur_variete v
     		ON l.id_variete=v.id_variete
     		WHERE e.etat IS NOT NULL and c.id_customer=1;

  2. #2
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 4
    Par défaut
    Voila ce que je voulais.
    Des suggestions plus élégantes/performantes sont bienvenues.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    (SELECT 	e.id_echantillon,
    		#v.nom_variete,
    		null as nom_variete,
    		c.company,
    		#p.nom_producteur,
    		null as nom_producteur,
    		#l.nom_lot,
    		null as nom_lot,
     		e.str_cl_echantillon,
     		e.nb_print,
    #		l.str_cl_lot
    		null as str_cl_lot
     
     		FROM ps_eur_echantillon e
     		JOIN ps_eur_demande d
     		ON e.id_demande=d.id_demande
     		JOIN ps_customer c
     		ON d.id_customer=c.id_customer
     		WHERE e.etat IS NOT NULL and d.id_customer=1 and e.id_lot IS NULL )
    union 
    (SELECT 	e.id_echantillon,
    		v.nom_variete,
     		c.company,
     		p.nom_producteur,
    		l.nom_lot,
     		e.str_cl_echantillon,
     		e.nb_print,
     		l.str_cl_lot
     
     		FROM ps_customer c
     		JOIN ps_eur_demande d
     		ON c.id_customer=d.id_customer
     		JOIN ps_eur_echantillon e
    		ON e.id_demande=d.id_demande
    		JOIN ps_eur_lot l
    		ON e.id_lot=l.id_lot
    		JOIN ps_eur_producteur p
     		ON p.id_producteur=l.id_producteur
     		JOIN ps_eur_variete v
     		ON l.id_variete=v.id_variete
     		WHERE e.etat IS NOT NULL and c.id_customer=1) ;

  3. #3
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Par défaut
    bonjour,


    je ne sais pas si c'est applicable dans votre cas mais regardez du côté des jointure externe (LEFT outer join) ca pourrait éviter de faire un union.

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 4
    Par défaut
    Merci pour la réponse, j'avais pensé à quelque chose de ce genre, ça conforte mon intuition. Ma base étant plutôt petite, et n'exigeant pas des performances critiques, je garde la piste pour le cas où je m'ennuierai, ou celui où les performances commenceraient à poser problème. (pour le moment, ça me demande trop de temps et d'énergie pour chercher l'amélioration par rapport au gain fonctionnel)

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

Discussions similaires

  1. Optimisation de l'union entre deux requetes
    Par fetano dans le forum Débuter
    Réponses: 5
    Dernier message: 21/09/2014, 14h51
  2. Union de deux requetes
    Par Malorie dans le forum Webi
    Réponses: 1
    Dernier message: 05/06/2013, 09h44
  3. Relier deux requetes avec un union sous PL/SQL
    Par gaijinma dans le forum PL/SQL
    Réponses: 4
    Dernier message: 25/05/2010, 15h27
  4. Requete sur l'union de deux tables.
    Par sabotage dans le forum Langage SQL
    Réponses: 4
    Dernier message: 29/09/2008, 10h51
  5. jointure entre deux requete
    Par Youssef dans le forum Langage SQL
    Réponses: 21
    Dernier message: 15/01/2004, 15h13

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