|
|||||||
| Développements Tout ce qui touche au développement d'applications ou du Web |
![]() |
|
|
LinkBack (2) | Outils de la discussion | Modes d'affichage |
|
|
#1 (permalink) |
|
Débutant
![]() Date d'inscription: novembre 2002
Localisation: Iruri
Messages: 482
Pouvoir de réputation: 60
![]() |
Bonjour amis développeurs
J'ai besoin de votre aide pour écrire qq lignes de SQL (langage que je n'ai pas touché depuis 7-8 ans). Je ne sais pas si çà a une importance, mais j'utilise "Sybase Central" et son outil "Interactice SQL". Voici en clair mon besoin (j'vais essayer d'être le plus clair possible): J'ai 2 tables (tarif_clients et tarifs_fournisseurs): chacune a un champ PRODUIT. Je voudrais que pour toutes les enregistrements de la table tarif_fournisseurs, si je trouve dans la table tarif_clients des enregistrements pour le même produit (tarif_clients.PRODUIT = tarif_clients.PRODUIT) et que tarif_clients.CLIENT = "TOTO", alors tarif_clients.PRIX = (tarif_fournisseurs.PRIX * 1,1). En Français, çà donne çà: si le client est "TOTO", alors le prix de vente est égal au prix d'achat + 10%. Pour ceux qui m'ont compris et qui connaissent le SQL, merci d'avance. A+ |
|
|
|
|
|
#2 (permalink) | |
|
Débutant
![]() Date d'inscription: novembre 2002
Localisation: Iruri
Messages: 482
Pouvoir de réputation: 60
![]() |
Citation:
si je trouve dans la table tarif_clients des enregistrements pour le même produit (tarif_fournisseurs.PRODUIT = tarif_clients.PRODUIT). A+ |
|
|
|
|
|
|
#3 (permalink) |
|
Master
![]() Date d'inscription: avril 2002
Messages: 2 433
Pouvoir de réputation: 160
![]() |
Comment construire une requette SQL ?
- Qu'est ce que je veux avoir en résultat ? - Quelles sont les contraintes à appliquer ? - De quelles tables ais-je besoin pour lier tout ça ? - Y-ils des sous conditions ? A partir de ça tu peux construire ta requette SELECT ... FROM ... WHERE ... HAVING ... |
|
|
|
|
|
#4 (permalink) |
|
Débutant
![]() Date d'inscription: avril 2002
Localisation: Belgique
Messages: 2 973
Pouvoir de réputation: 188
![]() |
Le principale problème est que tu as une condition (si client = x alors) à mettre dans ta requête. Or en SQL, tu n'as pas la solution pour l'exprimer. Il va te falloir faire deux requêtes, une avec le client = x et l'autre pour tous les autres clients.
__________________
"Etre tolérant, ce n'est pas tolérer l'intolérance des autres" (Jules Romain) Mes travaux photographiques Sympathisant GreenPeace et militant Ecolo |
|
|
|
|
|
#5 (permalink) |
|
Débutant
![]() Date d'inscription: novembre 2002
Localisation: Iruri
Messages: 482
Pouvoir de réputation: 60
![]() |
Salut
Le fait de devoir faire 2 requêtes, je m'y attendais un peu mais je ne sais pas comment les enchaîner.Au début je pensais à un truc comme çà UPDATE tarif_clients SET tarif_clients.PRIX = tarif_fournisseurs.PRIX * 1.1 WHERE (tarif_clients.PRODUIT = tarif_fournisseurs.PRODUIT and tarif_clients.CLIENT = 'TOTO') Qu'est ce qui ne marche pas ? Merci de m'aider. A+ |
|
|
|
|
|
#6 (permalink) |
|
Débutant
![]() Date d'inscription: avril 2002
Localisation: Belgique
Messages: 2 973
Pouvoir de réputation: 188
![]() |
dans la déclaration UPDATE, tu dois spécifier les deux tables sur lesquelles tu vas travailler.
Code:
UPDATE tarif_clients, tarif_fournisseurs SET tarif_clients.PRIX = tarif_fournisseurs.PRIX * 1.1 WHERE (tarif_clients.PRODUIT = tarif_fournisseurs.PRODUIT and tarif_clients.CLIENT = 'TOTO')
__________________
"Etre tolérant, ce n'est pas tolérer l'intolérance des autres" (Jules Romain) Mes travaux photographiques Sympathisant GreenPeace et militant Ecolo |
|
|
|
|
|
#8 (permalink) |
|
Débutant
![]() Date d'inscription: avril 2002
Localisation: Belgique
Messages: 2 973
Pouvoir de réputation: 188
![]() |
Pourquoi me poser cette question? Le plus simple serait que tu l'essayes et que tu vois le résultat.
En tout cas, elle respecte la norme SQL et devrait donc fonctionner, mais ca dépend principalement de ton SGBD. Sinon, tu vas devoir passer par un langage de programmation pour pouvoir le faire.
__________________
"Etre tolérant, ce n'est pas tolérer l'intolérance des autres" (Jules Romain) Mes travaux photographiques Sympathisant GreenPeace et militant Ecolo |
|
|
|
|
|
#9 (permalink) | |
|
Débutant
![]() Date d'inscription: novembre 2002
Localisation: Iruri
Messages: 482
Pouvoir de réputation: 60
![]() |
Citation:
La raison est toute simple: j'travaille pas le dimanche et j'ai pas accés à ma base de données à distance .Bon je teste çà dans la journée et te tiens au courant. A+ |
|
|
|
|
|
|
#10 (permalink) | |
|
Novice
![]() Date d'inscription: juillet 2004
Messages: 31
Pouvoir de réputation: 0
![]() |
Citation:
Nous pouvons juste remarquer que la requête peut supporter une amélioration l'update semble t'il ne concerne que tarif_clients ( reférence au SET) donc ... Code:
UPDATE tarif_clients
SET tarif_clients.PRIX = tarif_fournisseurs.PRIX * 1.1
WHERE (tarif_clients.PRODUIT = tarif_fournisseurs.PRODUIT
AND tarif_clients.CLIENT = 'TOTO');
Idéalement afin d'améliorer les performance il serait judicieus de faire la requete sur les ids et pas sur Client, les recherhces sur les clef primaires sont beaucoup plus rapides. @ ++++ |
|
|
|
|
![]() |
|
|
|||||||||||||||||||
|
||||||||||||||||||||
| Outils de la discussion | |
| Modes d'affichage | |