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 :

Requête SQL Stock


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2017
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2017
    Messages : 22
    Par défaut Requête SQL Stock
    Bonjour,
    Je vous écris pour avoir votre aide concernant une requête de mise à jours des stock, seulement les entrées, en effet j’espère pouvoir faire le même requête pour les sorties si celle ci marche.
    'aimerais effectuer une mise à jour ou remplacement des quantités de stock de mes matières premières lorsque qu'une réception est effectué (de date plus récente que celle d'une stock).

    Les Tables utilisées dans la requête:

    RECEPTION CodeRecept,CodeCdeFourn#,DateRecept
    DETAIL_COMM_RECEP QteRecept, CodeRecept#,CodeCdeFourn#,CodeMP#
    MATIERE_PREMIERE CodeMP,LibMP, StockIniMP, DateStockMP

    Les deux conditions :
    - RECEPTION.DateRecept >= MATIERE_PREMIERE.DateStockMP
    - DETAIL_COMM_RECEP.CodeMP =MATIERE_PREMIERE.CodeMP

    Apres avoir beaucoup cherché, ci-dessous la dernière requête que j'ai essayé, or après exécution il ne se passe toujours rien ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    UPDATE MATIERE_PREMIERE 
    SET MATIERE_PREMIERE.StockIniMP = [MATIERE_PREMIERE].[StockIniMP] + [DETAIL_COMM_RECEP].[QteRecept]
    FROM RECEPTION INNER JOIN (MATIERE_PREMIERE INNER JOIN DETAIL_COMM_RECEP ON MATIERE_PREMIERE.CodeMP = DETAIL_COMM_RECEP.CodeMP) ON RECEPTION.CodeRecept = DETAIL_COMM_RECEP.CodeRecept
    WHERE DETAIL_COMM_RECEP.CodeMP =MATIERE_PREMIERE.CodeMP
    AND RECEPTION.DateRecept >= MATIERE_PREMIERE.DateStockMP;
    Or quand je lance la requête, il me demande de rentrer moi même les paramètres tel que la quantité réceptionnée, le code de matière première ainsi que celui receptionné...

  2. #2
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2017
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2017
    Messages : 22
    Par défaut
    J'ai essayé cette requête mais elle ne marche pas car il y a une erreur de syntaxe, quelqu'un aurai un idée svp?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    UPDATE [MATIERE_PREMIERE]
    SET [MATIERE_PREMIERE].StockIniMP=[MATIERE_PREMIERE]![StockIniMP]+[DETAIL_COMM_RECEP]![QteRecept]
    FROM RECEPTION INNER JOIN (MATIERE_PREMIERE INNER JOIN DETAIL_COMM_RECEP ON MATIERE_PREMIERE.CodeMP = DETAIL_COMM_RECEP.CodeMP) ON RECEPTION.CodeRecept = DETAIL_COMM_RECEP.CodeRecept
    WHERE EXTRACT((([MATIERE_PREMIERE]![CodeMP])=[DETAIL_COMM_RECEP]![CodeMP])
    AND (([DETAIL_COMM_RECEP]![DateRecept])>=[MATIERE_PREMIERE]![DateStockMP]));

  3. #3
    Membre prolifique Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 921
    Par défaut
    Salut pavlina13.

    Il y a un problème avec la conception de votre base de données.
    Si dans la table 'RECEPTION', la colonne 'CodeCdeFourn' est une information liée à la clef primaire 'CodeRecep', il n'est pas besoin de répéter la colonne 'CodeCdeFourn' dans la table 'DETAIL_COMM_RECEP'.
    Car le simple fait d'avoir la colonne 'CodeRecep' dans la table 'DETAIL_COMM_RECEP', détermine d'une manière unique la colonne 'CodeCdeFourn'.

    Dans mon exemple, j'ai corrigé ce bug, en mettant en tant que clef primaire dans la table 'RECEPTION', le couple (CodeRecep, CodeCdeFourn).

    J'ai mis deux exemples.
    Le premier exemple concerne les chausettes, où dateStockMP > dateRecept, et donc pas de mise à jour dans les stocks.
    Le deuxième exemple concerne les chemises, où dateStockMP < dateRecept, et donc mise à jour des stocks.
    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
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    --------------
    SET AUTOCOMMIT = 0
    --------------
     
    --------------
    START TRANSACTION
    --------------
     
    --------------
    DROP DATABASE IF EXISTS `base`
    --------------
     
    --------------
    CREATE DATABASE `base`
        DEFAULT CHARACTER SET `latin1`
        DEFAULT COLLATE       `latin1_general_ci`
    --------------
     
    --------------
    DROP TABLE IF EXISTS `reception`
    --------------
     
    --------------
    CREATE TABLE `reception`
    ( `codeRecept`    integer unsigned not null auto_increment,
      `codeCdeFourn`  integer unsigned not null,
      `dateRecept`    date             not null,
      primary key (`codeRecept`,`codeCdeFourn`)
    ) ENGINE=InnoDB
      DEFAULT CHARSET=`latin1` COLLATE=`latin1_general_ci`
      ROW_FORMAT=COMPRESSED
    --------------
     
    --------------
    insert into `reception` (`codeRecept`,`codeCdeFourn`,`dateRecept`) values
      (25, 133, '2017-01-18'),
      (44, 225, '2017-01-22')
    --------------
     
    --------------
    select * from `reception`
    --------------
     
    +------------+--------------+------------+
    | codeRecept | codeCdeFourn | dateRecept |
    +------------+--------------+------------+
    |         25 |          133 | 2017-01-18 |
    |         44 |          225 | 2017-01-22 |
    +------------+--------------+------------+
    --------------
    DROP TABLE IF EXISTS `matiere_premiere`
    --------------
     
    --------------
    CREATE TABLE `matiere_premiere`
    ( `CodeMP`       integer unsigned not null auto_increment primary key,
      `LibMP`        varchar(255)     not null,
      `StockIniMP`   integer unsigned not null,
      `DateStockMP`  date             not null
    ) ENGINE=InnoDB
      DEFAULT CHARSET=`latin1` COLLATE=`latin1_general_ci`
      ROW_FORMAT=COMPRESSED
    --------------
     
    --------------
    insert into `matiere_premiere` (`CodeMP`,`LibMP`,`StockIniMP`,`DateStockMP`) values
      (12, 'chaussette', 1000, '2017-01-20'),
      (75, 'chemise',    1000, '2017-01-20')
    --------------
     
    --------------
    select * from `matiere_premiere`
    --------------
     
    +--------+------------+------------+-------------+
    | CodeMP | LibMP      | StockIniMP | DateStockMP |
    +--------+------------+------------+-------------+
    |     12 | chaussette |       1000 | 2017-01-20  |
    |     75 | chemise    |       1000 | 2017-01-20  |
    +--------+------------+------------+-------------+
    --------------
    DROP TABLE IF EXISTS `DETAIL_COMM_RECEP`
    --------------
     
    --------------
    CREATE TABLE `DETAIL_COMM_RECEP`
    ( `QteRecept`     integer unsigned not null,
      `CodeRecept`    integer unsigned not null,
      `CodeCdeFourn`  integer unsigned not null,
      `CodeMP`        integer unsigned not null,
      CONSTRAINT `FK_reception`        FOREIGN KEY (`CodeRecept`,`CodeCdeFourn`) REFERENCES `reception`        (`CodeRecept`,`CodeCdeFourn`) ON DELETE CASCADE ON UPDATE CASCADE,
      CONSTRAINT `FK_matiere_premiere` FOREIGN KEY (`CodeMP`)                    REFERENCES `matiere_premiere` (`CodeMP`)                    ON DELETE CASCADE ON UPDATE CASCADE,
      primary key (`CodeRecept`,`CodeCdeFourn`,`CodeMP`)
    ) ENGINE=InnoDB
      DEFAULT CHARSET=`latin1` COLLATE=`latin1_general_ci`
      ROW_FORMAT=COMPRESSED
    --------------
     
    --------------
    insert into `DETAIL_COMM_RECEP` (`QteRecept`,`CodeRecept`,`CodeCdeFourn`,`CodeMP`) values
      (100, 25, 133, 12),
      (100, 44, 225, 75)
    --------------
     
    --------------
    select * from `DETAIL_COMM_RECEP`
    --------------
     
    +-----------+------------+--------------+--------+
    | QteRecept | CodeRecept | CodeCdeFourn | CodeMP |
    +-----------+------------+--------------+--------+
    |       100 |         25 |          133 |     12 |
    |       100 |         44 |          225 |     75 |
    +-----------+------------+--------------+--------+
    --------------
    update      matiere_premiere  as t1
     
    inner join  detail_comm_recep as t2
            on  t2.CodeMP         = t1.CodeMP
     
    inner join  reception         as t3
            on  t3.CodeRecept     = t2.CodeRecept
           and  t3.CodeCdeFourn   = t2.CodeCdeFourn
     
           set  t1.StockIniMP = t1.StockIniMP + t2.QteRecept
     
         where  t3.dateRecept >= t1.dateStockMP
    --------------
     
    --------------
    select * from `matiere_premiere`
    --------------
     
    +--------+------------+------------+-------------+
    | CodeMP | LibMP      | StockIniMP | DateStockMP |
    +--------+------------+------------+-------------+
    |     12 | chaussette |       1000 | 2017-01-20  |
    |     75 | chemise    |       1100 | 2017-01-20  |
    +--------+------------+------------+-------------+
    --------------
    COMMIT
    --------------
     
    --------------
    SET AUTOCOMMIT = 1
    --------------
     
    Appuyez sur une touche pour continuer...
    En espérant répondre à votre attente !

    @+

  4. #4
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2017
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2017
    Messages : 22
    Par défaut
    Je te remercie pour ta réponse !
    Cependant ton code est assez compliqué pour mes connaissances, en plus de cela j'ai commis une erreur CodeCdefourn est bien en primary key dans reception, je corrige :

    RECEPTION CodeRecept,CodeCdeFourn#,DateRecept
    DETAIL_COMM_RECEP QteRecept, CodeRecept#,CodeCdeFourn#,CodeMP#
    MATIERE_PREMIERE CodeMP,LibMP, StockIniMP, DateStockMP

    Du coup le pb n'est surement pas la mais je ne voit toujours pas où.

  5. #5
    Membre Expert Avatar de vttman
    Homme Profil pro
    Développeur "couteau mosellan"
    Inscrit en
    Décembre 2002
    Messages
    1 140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur "couteau mosellan"
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 140
    Par défaut
    Pour moi la syntaxe (première requête) employée n'est pas claire !?

    Tester déjà ce select pour voir la/les lignes retournée/s ? avant d'avancer ... sur l'update.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    SELECT MATIERE_PREMIERE.StockIniMP, 
               MATIERE_PREMIERE.StockIniMP, 
              DETAIL_COMM_RECEP.QteRecept
    FROM RECEPTION
    INNER JOIN MATIERE_PREMIERE
     ON ( RECEPTION.CodeRecept = MATIERE_PREMIERE.CodeRecept
          AND RECEPTION.CodeCdeFourn = MATIERE_PREMIERE.CodeCdeFourn )
    INNER JOIN DETAIL_COMM_RECEP
     ON MATIERE_PREMIERE.CodeMP = DETAIL_COMM_RECEP.CodeMP
    WHERE
     RECEPTION.DateRecept >= MATIERE_PREMIERE.DateStockMP;

  6. #6
    Membre prolifique Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 921
    Par défaut
    Salut pavlina13.

    Citation Envoyé par Pavlina13
    Du coup le pb n'est surement pas là mais je ne voit toujours pas où.
    Quel problème ?

    Dans mon exemple, il y a deux parties.
    La première concerne la création des tables avec un jeu d'essai, en fonction de ce que vous m'avez communiqué.
    La seconde est l'illustration par deux exemples, dont l'une accepte et l'autre refuse la modification de votre stocke.

    Vous devez vous concentrer que sur la requête que j'extrais de mon exemple, et que je reproduis ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    update      matiere_premiere  as t1
     
    inner join  detail_comm_recep as t2
            on  t2.CodeMP         = t1.CodeMP
     
    inner join  reception         as t3
            on  t3.CodeRecept     = t2.CodeRecept
           and  t3.CodeCdeFourn   = t2.CodeCdeFourn
     
           set  t1.StockIniMP = t1.StockIniMP + t2.QteRecept
     
         where  t3.dateRecept >= t1.dateStockMP;
    @+

Discussions similaires

  1. Requête SQL stockée en BDD
    Par saraza dans le forum MySQL
    Réponses: 1
    Dernier message: 02/06/2015, 10h52
  2. Problème requête SQL Stock !
    Par DjSadwell dans le forum Langage SQL
    Réponses: 2
    Dernier message: 06/09/2013, 16h58
  3. Réponses: 21
    Dernier message: 16/03/2008, 13h17
  4. [Requête/SQL]Calcul de stock disponible
    Par étudiantesgea dans le forum Requêtes et SQL.
    Réponses: 14
    Dernier message: 25/04/2007, 17h10
  5. Procédures stockées ou requêtes SQL
    Par zoubidaman dans le forum Débuter
    Réponses: 2
    Dernier message: 18/08/2004, 02h36

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