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 :

Soustraire les données de deux tables


Sujet :

Requêtes MySQL

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2013
    Messages
    192
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2013
    Messages : 192
    Points : 68
    Points
    68
    Par défaut Soustraire les données de deux tables
    Bonjour,

    Je crée une base de données contenant les pièces de lego que j'ai en ma possession, qui me permettra de savoir de quelle pièces je dispose et lesquelles commander afin de compléter certains sets.

    A partir de la requête suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT missing_parts.part_num AS part, parts.name AS name, part_categories.name AS category, colors.name AS color, missing_parts.quantity
    FROM Lego.inventory_parts AS inventory_parts, Lego.parts AS parts, Lego.part_categories AS part_categories, Lego.colors AS colors, Lego.missing_parts AS missing_parts
    WHERE inventory_parts.part_num = parts.part_num AND parts.part_cat_id = part_categories.id AND inventory_parts.color_id = colors.id AND missing_parts.color_id = colors.id AND missing_parts.part_num = parts.part_num AND missing_parts.part_num
    IN
    ( SELECT missing_parts.part_num FROM missing_parts WHERE inventory_parts.quantity < missing_parts.quantity )
    qui affiche uniquement les articles de la table "missing_parts" dont la quantité est supérieure à ceux de la table "inventory_parts", j'aimerais afficher la différence entre les quantités présentes dans mes deux tables.

    La table "inventory_part" contient les pièces de lego que je possède et la table "missing_parts", celles qu'il me manque pour pouvoir compléter mes sets. J'ai besoin de savoir le nombre de pièces de chaque type qu'il faudra que je commande.

    Merci d'avance pour votre aide.

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 088
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 088
    Points : 38 393
    Points
    38 393
    Billets dans le blog
    9
    Par défaut
    Bonjour,

    C'est curieux d'avoir une table des manquants , la logique voudrait qu'il y a d'une part la quantité requise pour faire tel ou tel objet et d'autre part la quantité disponible en inventaire...
    donc quelque chose comme Inventory_parts + Required_parts
    Quoi qu'il en soit, il suffit d'ajouter dans la clause SELECT la soustraction entre les deux quantités.

    Voici un exemple de requête dans laquelle j'en profite pour
    - mettre en forme la requête, c'est plus facile à lire
    - remplacer les jointures antédiluviennes par des jointures normalisées
    - utiliser des alias de tables pour éviter de trimbaler des noms à rallonges

    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
    SELECT MP.part_num AS part
         , PA.name     AS name
         , PC.name     AS category
         , CO.name     AS color
         , MP.quantity AS Qty
         , IP.quantity - MP.quantity as Ecart
    FROM       Lego.inventory_parts as IP
    inner join Lego.parts           as PA
       on PA.part_num = IP.part_num
    inner join Lego.part_categories as PC
       on PC.id = PA.part_cat_id 
    inner join Lego.colors          as CO
       on CO.id = IP.color_id
    inner join Lego.missing_parts   as MP
       on MP.color_id = CO.id 
      and MP.part_num = PA.part_num 
      and MP.part_num
    where IP.quantity < MP.Quantity

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Août 2013
    Messages
    192
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2013
    Messages : 192
    Points : 68
    Points
    68
    Par défaut
    C'est curieux d'avoir une table des manquants
    En fait il s'agit bien d'une table contenant la quantité requise, c'est moi qui m'exprime mal.

    remplacer les jointures antédiluviennes par des jointures normalisées
    Le problème est que je travaille sous LibreOffice connecté à une base MySQL. Et il n'a pas l'air de supporter les jointures normalisées. Du coup, je ne sais pas comment rentrer la requête que tu m'as donnée.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Août 2013
    Messages
    192
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2013
    Messages : 192
    Points : 68
    Points
    68
    Par défaut
    Bien, j'ai trouvé la réponse au problème de LibreOffice. Il suffit de créer une vue sous mysql et de l'appeler par une requête sous LibreOffice. Merci pour ton aide aussi rapide.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Août 2013
    Messages
    192
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2013
    Messages : 192
    Points : 68
    Points
    68
    Par défaut
    Un autre problème se pose. Les numéro des pièces sont classée selon une catégorie principale et une sous catégorie. Du coup, la requête n'affiche pas toutes les pièces manquantes. Par exemple, si je possède la pièce N°3010a, la pièce N°3010apre004 manquante sera affichée, mais pas la pièce N°3010 manquante. Je ne sais pas comment utiliser la table de correspondance entre les catégories parents/enfants dans cette requête.

  6. #6
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 088
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 088
    Points : 38 393
    Points
    38 393
    Billets dans le blog
    9
    Par défaut
    Deux choses
    - si le numéro de pièce est la clef primaire, et j'ai cru comprendre que c'était le cas, alors il faut impérativement changer de clef primaire : une clef primaire doit être dénuée de tout contenu fonctionnel pour en garantir la stabilité. Créez une colonne technique de type "auto_incrément"
    - si je comprends bien, le numéro de pièce se compose de deux sous-parties, si tel est le cas, il s'agit d'un viol de la première forme normale et c'est la source de tous les maux

    Voici des explications sur les formes normales, à lire impérativement :
    https://sqlpro.developpez.com/cours/standards/#L2.2
    et en plus détaillé :
    https://fsmrel.developpez.com/basesr...sation/?page=2

    Et pour ce qui concerne la clef primaire :
    https://fsmrel.developpez.com/basesr...?page=3#L3.2.6

    Il semble bien que la modélisation de votre BDD soit complètement à revoir (y compris le nom des tables comme vu précédemment)
    Le forum modélisation est là pour vous aider, faites un tour ici :
    https://www.developpez.net/forums/f6...sation/schema/

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Août 2013
    Messages
    192
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2013
    Messages : 192
    Points : 68
    Points
    68
    Par défaut
    En fait, il s'agit la de la base mise à disposition sur le site "rebrickable". Les tables sur lesquelles portent les requêtes en question, sont des tables que j'ai crées à partir de mon inventaire de lego et de pièces nécessaires à la complétion de certains sets. Il s'agit d'un essai. J'espère pouvoir intégrer la table contenant mon inventaire à cette base. En effet, à terme, c'est cette base qui me donnera les pièces nécessaires pour compléter un ou plusieurs sets.

    En voici le schéma.

    Nom : schema.gif
Affichages : 128
Taille : 62,4 Ko


    Qiand aux noms des tables, j'avoue n'avoir pas eu envie de modifier l'ensemble de la base pour leur donner des noms plus courts.

  8. #8
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 088
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 088
    Points : 38 393
    Points
    38 393
    Billets dans le blog
    9
    Par défaut
    Je suis allé consulter le site "rebrickable" mais je ne vois pas à quel endroit on trouve une description de base de données...

    Pour votre propre base, vous aurez tout intérêt à revoir complètement le modèle sur le forum dont je vous ai communiqué le lien précédemment, vous y gagnerez en fiabilité de la BDD, en performances, en facilité de requêtage et vous apprendrez des choses indispensables sur la modélisation

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Août 2013
    Messages
    192
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2013
    Messages : 192
    Points : 68
    Points
    68
    Par défaut
    Le schéma se trouve ici. Bien qu'il ne soit pas très détaillé.

    https://rebrickable.com/help/lego-database/

    En tout cas, je vais aller faire un tour sur ce forum.

Discussions similaires

  1. Comment récupérer les données de deux tables différentes en jsp
    Par burnit4mosta dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 10/06/2011, 17h15
  2. Réponses: 1
    Dernier message: 13/04/2010, 00h48
  3. [VB6]Grouper les données des deux tables dans une troisième
    Par Abed_H dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 29/04/2009, 12h29
  4. Comparer les données de deux tables ?
    Par bicz400 dans le forum Requêtes
    Réponses: 1
    Dernier message: 15/02/2008, 12h33
  5. exporter les données entre deux tables différentes ?
    Par tizilfin dans le forum Oracle
    Réponses: 3
    Dernier message: 12/03/2007, 16h39

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