Précédent   Le Forum de Génération Nouvelles Technologies > Logiciels > Développements
S'inscrire Stats IRC FAQ Membres Calendrier Recherche Messages du jour Marquer les forums comme lus

Développements Tout ce qui touche au développement d'applications ou du Web

Réponse
 
LinkBack (2) Outils de la discussion Modes d'affichage
Vieux 05/11/2004, 09h59   #1 (permalink)
JANTTO
Débutant
 
Date d'inscription: novembre 2002
Localisation: Iruri
Messages: 482
Pouvoir de réputation: 60 JANTTO est bien parti(e)
Par défaut

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+
JANTTO est déconnecté   Réponse avec citation
Vieux 05/11/2004, 10h04   #2 (permalink)
JANTTO
Débutant
 
Date d'inscription: novembre 2002
Localisation: Iruri
Messages: 482
Pouvoir de réputation: 60 JANTTO est bien parti(e)
Par défaut

Citation:
Originally posted by JANTTO@05 Nov 2004 10:59


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).

Petite correction:

si je trouve dans la table tarif_clients des enregistrements pour le même produit (tarif_fournisseurs.PRODUIT = tarif_clients.PRODUIT).

A+
JANTTO est déconnecté   Réponse avec citation
Vieux 06/11/2004, 13h23   #3 (permalink)
Paul :-)
Master
 
Date d'inscription: avril 2002
Messages: 2 433
Pouvoir de réputation: 160 Paul :-) est bien parti(e)
Par défaut

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 ...
Paul :-) est déconnecté   Réponse avec citation
Vieux 06/11/2004, 13h32   #4 (permalink)
pluton
Débutant
 
Date d'inscription: avril 2002
Localisation: Belgique
Messages: 2 973
Pouvoir de réputation: 188 pluton est bien parti(e)
Par défaut

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.
__________________
Pluton
"Etre tolérant, ce n'est pas tolérer l'intolérance des autres" (Jules Romain)

Mes travaux photographiques

Sympathisant GreenPeace et militant Ecolo
pluton est déconnecté   Réponse avec citation
Vieux 06/11/2004, 13h39   #5 (permalink)
JANTTO
Débutant
 
Date d'inscription: novembre 2002
Localisation: Iruri
Messages: 482
Pouvoir de réputation: 60 JANTTO est bien parti(e)
Par défaut

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+
JANTTO est déconnecté   Réponse avec citation
Vieux 06/11/2004, 14h35   #6 (permalink)
pluton
Débutant
 
Date d'inscription: avril 2002
Localisation: Belgique
Messages: 2 973
Pouvoir de réputation: 188 pluton est bien parti(e)
Par défaut

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')
__________________
Pluton
"Etre tolérant, ce n'est pas tolérer l'intolérance des autres" (Jules Romain)

Mes travaux photographiques

Sympathisant GreenPeace et militant Ecolo
pluton est déconnecté   Réponse avec citation
Vieux 07/11/2004, 14h01   #7 (permalink)
JANTTO
Débutant
 
Date d'inscription: novembre 2002
Localisation: Iruri
Messages: 482
Pouvoir de réputation: 60 JANTTO est bien parti(e)
Par défaut


D'après toi, çà mercherait cette requête ? Parce qu'il me semble bien l'avoir essayée...
A+
JANTTO est déconnecté   Réponse avec citation
Vieux 07/11/2004, 14h40   #8 (permalink)
pluton
Débutant
 
Date d'inscription: avril 2002
Localisation: Belgique
Messages: 2 973
Pouvoir de réputation: 188 pluton est bien parti(e)
Par défaut

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.
__________________
Pluton
"Etre tolérant, ce n'est pas tolérer l'intolérance des autres" (Jules Romain)

Mes travaux photographiques

Sympathisant GreenPeace et militant Ecolo
pluton est déconnecté   Réponse avec citation
Vieux 08/11/2004, 10h13   #9 (permalink)
JANTTO
Débutant
 
Date d'inscription: novembre 2002
Localisation: Iruri
Messages: 482
Pouvoir de réputation: 60 JANTTO est bien parti(e)
Par défaut

Citation:
Originally posted by pluton@07 Nov 2004 15:40
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.
Salut Pluton,

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+
JANTTO est déconnecté   Réponse avec citation
Vieux 18/11/2004, 13h10   #10 (permalink)
xenon
Novice
 
Date d'inscription: juillet 2004
Messages: 31
Pouvoir de réputation: 0 xenon est bien parti(e)
Par défaut

Citation:

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')
Salut

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');
Le rappel a la table tarif_client n'est utile que s'il y a ambiguïté possible sur les champs ( ce qui cependant semble être le cas.
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.

@ ++++
xenon est déconnecté   Réponse avec citation
Réponse


LinkBacks (?)
LinkBack to this Thread: http://forum.generation-nt.com/developpements/requete-sql-152867/
Envoyé par For Type Date
excel +lock +sql - Recherche Google This thread Refback 29/09/2006 19h00
sybase + select imbriqué - Recherche Google This thread Refback 28/09/2006 18h09

Utilisateurs regardant la discussion actuelle : 1 (0 membre(s) et 1 invité(s))
 

Règles de messages
Vous pouvez ouvrir de nouvelles discussions : nonoui
Vous pouvez envoyer des réponses : nonoui
Vous pouvez insérer des pièces jointes : nonoui
Vous pouvez modifier vos messages : nonoui

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are oui
Pingbacks are oui
Refbacks are non
Outils de la discussion
Modes d'affichage



Fuseau horaire GMT +2. Il est actuellement 17h15.

S'inscrire Charte Stats IRC FAQ Membres Calendrier Recherche Messages du jour Marquer les forums comme lus

Hit-Parade NewsNow