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 :

Requete avec jointure


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    829
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 829
    Par défaut Requete avec jointure
    Bonjour à tous,

    J'aurais besoin d'une petite aide.

    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
    42
    43
    44
    45
    46
     
    CREATE TABLE `emballage` (
      `id_emb` int(11) NOT NULL auto_increment,
      `nom_emb` varchar(50) NOT NULL,
      `id_four` int(11) NOT NULL,
      `cond_emb` int(11) default NULL,
      `id_conditionnement` int(30) default NULL,
      `pu_emb` decimal(10,5) NOT NULL COMMENT 'prix unitaire emballage',
      `tva_emb` decimal(3,2) default NULL,
      `id_conditionnement_pu` int(30) NOT NULL,
      `coef_emb_pdr` decimal(10,5) default NULL,
      `pu_emb_pdr` decimal(10,5) default NULL,
      `composup25_emb` varchar(30) default NULL,
      `date_m_emb` date default NULL,
      `id_emballage_type` int(11) NOT NULL,
      `actif_emb` tinyint(1) NOT NULL default '1',
      PRIMARY KEY  (`id_emb`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=75 ;
     
    -- 
    -- Contenu de la table `emballage`
    -- 
     
    INSERT INTO `emballage` (`id_emb`, `nom_emb`, `id_four`, `cond_emb`, `id_conditionnement`, `pu_emb`, `tva_emb`, `id_conditionnement_pu`, `coef_emb_pdr`, `pu_emb_pdr`, `composup25_emb`, `date_m_emb`, `id_emballage_type`, `actif_emb`) VALUES 
    (1, 'Sacs P.E 450X150X700 /1500 Bleu ', 33, 1000, 3, 0.04318, 9.99, 3, 1.00000, 0.04318, '', '0000-00-00', 1, 1),
    (2, 'Sacs P.E 450X150X700 /1500    Blanc', 33, 1000, 3, 0.02557, 9.99, 3, 1.00000, 0.02557, '', '2008-07-03', 1, 0),
    (3, 'Rouleaux Scotch Pp 50Mm X 660M pr', 31, 6, 3, 5.15000, 9.99, 3, 0.00152, 0.00780, '', '0000-00-00', 1, 1),
    (4, 'Film Etirable Manuel 15µ 300M pr', 31, 6, 3, 4.13000, 9.99, 3, 0.00332, 0.01370, '', '0000-00-00', 1, 1),
    (5, 'Cerclage 12Mm*0,63', 31, 1, 3, 24.84000, 9.99, 3, 0.00026, 0.00655, '', '0000-00-00', 1, 1),
    (6, 'M.  Alu Diam / To 231 (Chinois', 28, 600, 3, 0.12900, 9.99, 3, 0.00000, 0.00000, '', '2008-07-03', 1, 0),
    (7, 'Moule À Cake Plié 203 X 93 X 5', 40, 1000, 3, 0.09460, 9.99, 3, 0.00000, 0.00000, '', '2008-07-03', 1, 0),
    (8, 'Moule À Cake 640/42G', 30, 1000, 3, 0.04280, 9.99, 3, 0.00000, 0.00000, '', '2008-07-03', 1, 0),
    (9, 'Moule À Cake Plié 170 X 60 X 4', 30, 1000, 3, 0.03990, 9.99, 3, 0.00000, 0.00000, '', '2008-07-03', 1, 0),
    (10, 'Moule Alu 232 X 108 H60 M1100', 40, 700, 3, 0.09460, 9.99, 3, 1.00000, 0.09460, '', '2008-04-30', 1, 1),
    (11, 'Tourtière Basse Carton Tp277H2', 40, 600, 3, 0.12935, 9.99, 3, 1.00000, 0.12935, '', '2008-07-03', 1, 0),
    (12, 'Tourtière Basse Carton Tp247H2', 40, 540, 3, 0.11505, 9.99, 3, 1.00000, 0.11505, '', '2008-07-03', 1, 0),
    (13, 'Moule Carton 170 X 80H50', 40, 325, 3, 0.14849, 9.99, 3, 0.00000, 0.00000, '', '2008-07-03', 1, 0),
    (14, 'Bobine De Plastique Bleu Pour ', 33, 12, 1, 2.89000, 9.99, 1, 0.00000, 0.00000, '', '0000-00-00', 1, 1),
    (15, 'Bobine De Papier Sulfurisé Pou', 34, 12, 1, 3.80000, 9.99, 1, 0.00000, 0.00000, '', '2008-07-03', 1, 0),
    (16, 'Etiquettes Auto.Gm Rose', 32, 12000, 3, 0.00958, 9.99, 3, 1.00000, 0.00958, '', '0000-00-00', 1, 1),
    (17, 'Etiquettes Auto.Gm Vertes', 32, 12000, 3, 0.00958, 9.99, 3, 1.00000, 0.00958, '', '0000-00-00', 1, 1),
    (18, 'Etiquettes Auto.Gm Blanche', 32, 12000, 3, 0.00894, 9.99, 3, 1.00000, 0.00894, '', '0000-00-00', 1, 1),
    (19, 'Etiquettes Toupargel Croissant', 32, 1500, 3, 0.02996, 9.99, 3, 0.00000, 0.00000, '', '0000-00-00', 1, 1),
    (20, 'Etiquettes Toupargel Pain Choc', 32, 1500, 3, 0.02996, 9.99, 3, 0.00000, 0.00000, '', '0000-00-00', 1, 1),
    (21, 'Etiquettes Argel Croissant', 32, 1500, 3, 0.04494, 9.99, 3, 1.00000, 0.04494, '', '0000-00-00', 1, 1),
    (22, 'Etiquettes Argel Pain Choco', 32, 1500, 3, 0.04494, 9.99, 3, 1.00000, 0.04494, '', '0000-00-00', 1, 1),
    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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
     
    CREATE TABLE `inventaire_emb` (
      `id_inventaire_emb` int(11) NOT NULL auto_increment,
      `date_inventaire_emb` date NOT NULL,
      `qte_inventaire_emb` decimal(10,5) NOT NULL,
      `id_emb` int(11) NOT NULL,
      `mois_inventaire_emb` int(11) NOT NULL,
      `annee_inventaire_emb` int(11) NOT NULL,
      `pu_j_inventaire_emb` decimal(10,5) NOT NULL,
      PRIMARY KEY  (`id_inventaire_emb`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=187 ;
     
    -- 
    -- Contenu de la table `inventaire_emb`
    -- 
     
    INSERT INTO `inventaire_emb` (`id_inventaire_emb`, `date_inventaire_emb`, `qte_inventaire_emb`, `id_emb`, `mois_inventaire_emb`, `annee_inventaire_emb`, `pu_j_inventaire_emb`) VALUES 
    (1, '2008-06-17', 4800.00000, 6, 5, 2008, 0.12900),
    (2, '2008-06-17', 3000.00000, 8, 5, 2008, 0.04280),
    (3, '2008-06-17', 432.00000, 4, 5, 2008, 4.13000),
    (4, '2008-06-17', 126.00000, 57, 5, 2008, 0.78000),
    (5, '2008-06-17', 126.00000, 3, 5, 2008, 5.15000),
    (6, '2008-06-17', 102.00000, 5, 5, 2008, 24.84000),
    (7, '2008-06-17', 60000.00000, 16, 5, 2008, 0.00958),
    (8, '2008-06-17', 96000.00000, 18, 5, 2008, 0.00894),
    (9, '2008-06-17', 72000.00000, 17, 5, 2008, 0.00958),
    (10, '2008-06-17', 15900.00000, 21, 5, 2008, 0.04494),
    (11, '2008-06-17', 30000.00000, 23, 5, 2008, 0.01050),
    (12, '2008-06-17', 60.00000, 14, 5, 2008, 2.89000),
    (13, '2008-06-17', 2200.00000, 55, 5, 2008, 0.35512),
    (14, '2008-06-17', 40000.00000, 50, 5, 2008, 0.04970),
    (15, '2008-06-17', 32000.00000, 1, 5, 2008, 0.04318),
    (16, '2008-06-17', 9000.00000, 69, 5, 2008, 0.02520),
    (17, '2008-06-17', 3500.00000, 71, 5, 2008, 0.03800),
    (18, '2008-06-17', 6930.00000, 43, 5, 2008, 0.42300),
    (19, '2008-06-17', 4800.00000, 45, 5, 2008, 0.56500),
    (20, '2008-06-17', 3840.00000, 72, 5, 2008, 0.49300),
    (21, '2008-06-17', 2640.00000, 41, 5, 2008, 0.28700),
    (22, '2008-06-17', 6000.00000, 24, 5, 2008, 5.45000),
    (23, '2008-06-17', 22500.00000, 26, 5, 2008, 0.01850),
    (24, '2008-06-17', 22.00000, 25, 5, 2008, 7.45000),
    (25, '2008-06-17', 5720.00000, 52, 5, 2008, 0.30600),
    (26, '2008-06-17', 10560.00000, 48, 5, 2008, 0.22900),
    (27, '2008-06-17', 350.00000, 51, 5, 2008, 1.81000),
    (28, '2008-06-17', 18000.00000, 33, 5, 2008, 0.02500),
    (29, '2008-06-17', 2400.00000, 11, 5, 2008, 0.12935),
    (30, '2008-06-17', 16100.00000, 10, 5, 2008, 0.09460),
    (31, '2008-06-17', 9180.00000, 12, 5, 2008, 0.11505),
    (32, '2008-06-17', 26000.00000, 63, 5, 2008, 0.01775),
    (33, '2008-06-17', 1200.00000, 65, 5, 2008, 0.01875),
    (34, '2008-06-17', 6600.00000, 67, 5, 2008, 0.02500),
    (35, '2008-06-17', 6600.00000, 62, 5, 2008, 0.01425),
    (36, '2008-06-17', 1100.00000, 64, 5, 2008, 0.01435),
    (37, '2008-06-17', 6400.00000, 66, 5, 2008, 0.02625),
    (38, '2008-06-17', 13.00000, 38, 5, 2008, 66.00000),
    (39, '2008-06-17', 48.00000, 37, 5, 2008, 14.67000),
    (40, '2008-06-18', 0.00000, 28, 5, 2008, 0.23900),
    (41, '2008-06-18', 0.00000, 30, 5, 2008, 0.13750),

    Voici ma requete:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT emballage.id_emb, nom_emb, nom_four, cond_emb, unite_conditionnement, FORMAT((qte_inventaire_emb),2) as qte_prec
    FROM emballage
    RIGHT JOIN inventaire_emb ON emballage.id_emb = inventaire_emb.id_emb
    INNER JOIN fournisseur ON emballage.id_four = fournisseur.id_four
    INNER JOIN conditionnement ON conditionnement.id_conditionnement = emballage.id_conditionnement WHERE mois_inventaire_emb ='05' AND annee_inventaire_emb ='2008' ORDER BY nom_four;
    Je voudrait récupérer les informations de mon emballage , mais aussi la quantité de l'inventaire emballage.

    Le problème se situe dans le cas ou j'ajoute un emballage:
    - Mon emballage est rajouter dans ma base.
    - je le rentre pour le mois actuel (06/2008)
    - je visualise le contenue de l'inventaire avec la requête ci-dessus. (avec le mois précédent et le mois actuel, la requête ne concerne que le mois précédent).


    Problème il ne m'affiche uniquement les emballage qui ont l'inventaire de rempli pour le mois précédent:
    Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT emballage.id_emb, nom_emb, nom_four, cond_emb, unite_conditionnement, FORMAT((qte_inventaire_emb),2) as qte_prec
    FROM emballage
    RIGHT JOIN inventaire_emb ON emballage.id_emb = inventaire_emb.id_emb
    INNER JOIN fournisseur ON emballage.id_four = fournisseur.id_four
    INNER JOIN conditionnement ON conditionnement.id_conditionnement = emballage.id_conditionnement 
    WHERE mois_inventaire_emb ='05' AND annee_inventaire_emb ='2008' ORDER BY nom_four;
    La requete ne m'affiche uniquement ceux qui ont l'inventaire de remplie le 05/2008. Quel paramètre je doit rajouter dans ma requete pour affiche ceux qui non pas encore d'inventaire.

    Faut-il que je rajoute Une jointure en RIGHT OU LEFT JOIN?(J'ai du mal a comprendre le fonctionnement de ces jointures) Ou je doit intervenir dans la clause?

    Merci d'avance pour votre aide.

    guigui69

  2. #2
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 059
    Par défaut
    Bonjour,

    Remplace ton RIGHT JOIN par un LEFT JOIN, et mets des LEFT JOIN ensuite à la place des INNER JOIN.
    Quelle est la différence entre les 2 ? Et bien, pour le LEFT JOIN, la jointure renvoie toutes les données communes aux 2 tables selon la condition de jointures, plus les données de la table de gauche (d'où le nom) qui n'ont pas d'équivalent dans la table de droite.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT *
    FROM table1 t1
    LEFT JOIN table2 t2 on t1.x = t2.y
    renverra toutes les lignes de table1 qui ont un X égal au Y de table2, ainsi que les infos de table2 pour ces lignes, plus toutes les lignes de table1 qui n'ont pas X égal au Y de table2 (les données de table2 valant alors NULL, puisqu'il n'y a pas d'équivalent dans cette table).
    Avec RIGHT JOIN, ça renvoie toujours toutes les lignes de table1 et de table2 qui ont X égal à Y, plus toutes les lignes de table2 qui n'ont pas Y en commun avec un X de table1.
    Du coup, LEFT JOIN renvoie toutes les lignes de table1, tandis que RIGHT JOIN renvoie toutes les lignes de table2.

    ced
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    829
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 829
    Par défaut
    Merci pour ta réponse,

    voici ma requete

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
    SELECT emballage.id_emb, nom_emb, nom_four, cond_emb, unite_conditionnement, FORMAT((qte_inventaire_emb),2) AS qte_prec
    FROM emballage
    LEFT JOIN inventaire_emb ON emballage.id_emb = inventaire_emb.id_emb
    LEFT JOIN fournisseur ON emballage.id_four = fournisseur.id_four
    LEFT JOIN conditionnement ON conditionnement.id_conditionnement = emballage.id_conditionnement 
    WHERE mois_inventaire_emb ='05' AND annee_inventaire_emb ='2008'
    mais il m'affiche toujours pas les produit en plus.

    Dans ma base j'ai rajouter 3 produit emballages qui non pas d'inventaire pour le 05 2008 , et pourtant il n'affiche pas ces 3 produits en plus dans la liste.

    Je ne comprend pas pourquoi? Quel erreur j'ai pu faire?

    Merci d'avance pour votre aide et un merci pour l'explication de ces jointures.

    guigui69

Discussions similaires

  1. Réponses: 5
    Dernier message: 06/02/2007, 13h46
  2. [ADO] Requete avec jointure
    Par okparanoid dans le forum Bases de données
    Réponses: 6
    Dernier message: 08/11/2006, 17h05
  3. recherche aide pour requete avec jointure
    Par nebil dans le forum Requêtes
    Réponses: 5
    Dernier message: 21/08/2006, 17h03
  4. [MySQL] Erreur dans une requête avec jointures
    Par bobic dans le forum Langage SQL
    Réponses: 17
    Dernier message: 03/08/2006, 13h04
  5. requete avec jointure & group by
    Par de LANFRANCHI dans le forum Langage SQL
    Réponses: 9
    Dernier message: 27/07/2004, 14h31

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