Probleme requete UPDATE
Résolu
Sissou1970
Messages postés
23
Date d'inscription
Statut
Membre
Dernière intervention
-
Utilisateur anonyme -
Utilisateur anonyme -
Bonjour,
Je me permet de faire appel à votre aide pour un problème de rédaction de requête UPDATE sur laquelle je bosse depuis plus d'une semaine.
J'ai une table (MaTable) contenant une liste de produits, les emballages et les clients qui leurs sont associés. Un même produit peut être envoyé à plusieurs clients, dans plusieurs emballages différents, et un même client peut avoir plusieurs emballages en fonction des produits.
Je souhaite écrire une requête qui va interroger MaTable, trouver le Client2, rechercher l'emballage du Client1 et le copier sur le Client2 .
Voilà ce que j'ai rédiger. Mais comme je m'y connais peu en UPDATE, je souhaite savoir si ma requête est bien rédigé, et si elle aura le résultat attendu.
UPDATE MaTable
SET Emballage = (SELECT MaTable.Emballage
FROM MaTable
WHERE MaTable.Client LIKE ('Client1'))
WHERE MaTable.Client LIKE Client2
Merci pour votre aide
Je me permet de faire appel à votre aide pour un problème de rédaction de requête UPDATE sur laquelle je bosse depuis plus d'une semaine.
J'ai une table (MaTable) contenant une liste de produits, les emballages et les clients qui leurs sont associés. Un même produit peut être envoyé à plusieurs clients, dans plusieurs emballages différents, et un même client peut avoir plusieurs emballages en fonction des produits.
Je souhaite écrire une requête qui va interroger MaTable, trouver le Client2, rechercher l'emballage du Client1 et le copier sur le Client2 .
Voilà ce que j'ai rédiger. Mais comme je m'y connais peu en UPDATE, je souhaite savoir si ma requête est bien rédigé, et si elle aura le résultat attendu.
UPDATE MaTable
SET Emballage = (SELECT MaTable.Emballage
FROM MaTable
WHERE MaTable.Client LIKE ('Client1'))
WHERE MaTable.Client LIKE Client2
Merci pour votre aide
A voir également:
- Probleme requete UPDATE
- Windows update bloqué - Guide
- Winget update - Guide
- Asus live update - Télécharger - Utilitaires
- Wsus offline update - Télécharger - Systèmes d'exploitation
- Nettoyage windows update - Guide
4 réponses
salut,
tu mets 'Client1' entre guillemets vu que c'est une chaine, mais pas 'Client2'. Donc soit Client2 est une colonne de ta table, soit c'est un faute ^^.
De même, les parenthèse autour de 'Client1' sont inutiles.
Ensuite, le like ici est inutile aussi car tu recherche la chaine exacte.
Enfin, tu déclare deux fois la même table sans alias donc ca ne fonctionnera pas.
Donc écris plutôt :
J'éspère aussi qu'une ligne client est unique, sinon tu auras une erreur. De ce que j'ai lu, tu aura probablement le cas, donc il faudrai aussi que tu prennes en compte le produit car, à priori, c'est l'association produit/emballage/client qui est unique (mais il faudra que tu le confirme).
Pour ma part j'aurai plutot fais une requête comme celle ci :
naga
UPDATE MaTable
SET Emballage = (SELECT MaTable.Emballage
FROM MaTable
WHERE MaTable.Client LIKE ('Client1'))
WHERE MaTable.Client LIKE Client2
tu mets 'Client1' entre guillemets vu que c'est une chaine, mais pas 'Client2'. Donc soit Client2 est une colonne de ta table, soit c'est un faute ^^.
De même, les parenthèse autour de 'Client1' sont inutiles.
Ensuite, le like ici est inutile aussi car tu recherche la chaine exacte.
Enfin, tu déclare deux fois la même table sans alias donc ca ne fonctionnera pas.
Donc écris plutôt :
UPDATE MaTable
SET Emballage = (SELECT MaTable.Emballage
FROM MaTable T2
WHERE T2.Client = 'Client1')
WHERE MaTable.Client = 'Client2'
J'éspère aussi qu'une ligne client est unique, sinon tu auras une erreur. De ce que j'ai lu, tu aura probablement le cas, donc il faudrai aussi que tu prennes en compte le produit car, à priori, c'est l'association produit/emballage/client qui est unique (mais il faudra que tu le confirme).
Pour ma part j'aurai plutot fais une requête comme celle ci :
UPDATE Matable T1 , MaTable T2
SET T1.Emballage = T2.Emballage
WHERE T1.Client = 'Client1'
and T2.Client = 'Client2'
AND T1.Produit = T2.Produit
naga
Bonjour,
Merci nagashima pour ta réponse.
Je te remercie également pour l'analyse de ma requête maladroite. J'ai appris le sql sur le tard dans les bouquins et sur les sites et forums d'entraide.
Comme tu l'as compris client2 n'est pas une colonne mais une chaîne. De plus, c'est bien l'association produit/emballage/client qui est unique (un produit peut avoir plusieurs emballages et plusieurs clients associés. Un client peut avoir plusieurs produits et emballages. Un produit peut également avoir plusieurs emballages pour un même client.)
Ce que je cherche , c'est récupérer les valeurs d'un produit pour un client spécifiques (ici client1) et les copier produits par produits sur le client2.
Pour être clair, tout se trouve dans une seule et même table.
Enfin, je ne comprends pas très bien la requête que tu me conseilles.
Sissou
Merci nagashima pour ta réponse.
Je te remercie également pour l'analyse de ma requête maladroite. J'ai appris le sql sur le tard dans les bouquins et sur les sites et forums d'entraide.
Comme tu l'as compris client2 n'est pas une colonne mais une chaîne. De plus, c'est bien l'association produit/emballage/client qui est unique (un produit peut avoir plusieurs emballages et plusieurs clients associés. Un client peut avoir plusieurs produits et emballages. Un produit peut également avoir plusieurs emballages pour un même client.)
Ce que je cherche , c'est récupérer les valeurs d'un produit pour un client spécifiques (ici client1) et les copier produits par produits sur le client2.
Pour être clair, tout se trouve dans une seule et même table.
Enfin, je ne comprends pas très bien la requête que tu me conseilles.
Sissou
salut ,
et bien en fait, dans la requête :
je déclare deux fois la table de manière à mettre à jour un élément de cette table pour elle même.
C'est à dire, si tu fais cette requête ci :
tu récupère le code emballage actuel pour le client1 et le code emballage du client2 que l'on souhaite mettre sur le client1.
Donc, lors de mon 'update', je lui dis simplement que quand un produit du Client1 existe pour le Client 2, on met à jours l'emballage du client 1 pour le client 2.
et bien en fait, dans la requête :
UPDATE Matable T1 , MaTable T2
SET T1.Emballage = T2.Emballage
WHERE T1.Client = 'Client1'
and T2.Client = 'Client2'
AND T1.Produit = T2.Produit
je déclare deux fois la table de manière à mettre à jour un élément de cette table pour elle même.
C'est à dire, si tu fais cette requête ci :
SELECT T1.Emballage as oldemballage, T2.Emballage as newemballage
from Matable T1 , MaTable T2
WHERE T1.Client = 'Client1'
and T2.Client = 'Client2'
AND T1.Produit = T2.Produit
tu récupère le code emballage actuel pour le client1 et le code emballage du client2 que l'on souhaite mettre sur le client1.
Donc, lors de mon 'update', je lui dis simplement que quand un produit du Client1 existe pour le Client 2, on met à jours l'emballage du client 1 pour le client 2.
Salut,
Si j'ai bien compris :
UPDATE Matable T1, MaTable T2
SET T1.Emballage = T2.Emballage
SET T1.QuantitéDansUnEmballage = T2.QuantiteDansUnEmballage
WHERE T1.Client = 'Client1'
AND T2.Client = 'Client2'
AND T1.Produit = T2.Produit
me permet de mettre à jour 2 colonnes ?
(Produit/Emballage/QuantitéDansUnEmballage/Client)
Si j'ai bien compris :
UPDATE Matable T1, MaTable T2
SET T1.Emballage = T2.Emballage
SET T1.QuantitéDansUnEmballage = T2.QuantiteDansUnEmballage
WHERE T1.Client = 'Client1'
AND T2.Client = 'Client2'
AND T1.Produit = T2.Produit
me permet de mettre à jour 2 colonnes ?
(Produit/Emballage/QuantitéDansUnEmballage/Client)