Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
666 connectés 

  FORUM HardWare.fr
  Programmation

  [SQL] J'en appelle aux Dieux du SQL (et aux déesses ;o)

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[SQL] J'en appelle aux Dieux du SQL (et aux déesses ;o)

n°51220
xaero
Posté le 06-08-2001 à 12:24:32  profilanswer
 

Hello World ! :hello:
   Voila le pb. J'ai une table du personnel contenant diverses infos (table EMPLOYES). Dont une colonne pour le téléphone. Ce numéro figure dans une autre table (table TELEPHONE). J'aimerais insérer le numéro de téléphone dans la table EMPLOYES à la personne correspondante bien-sûr. Champ ID pour jointure.  
   Quelle serait la syntaxe SQL sachant que :
     - Update : c'est pour maj avec même valeur
     - Insert Into : Création de nouveaux tuples
 
   Je pense que c'est simple mais g pô trouvé :sweat: Je me remets doucement dans le SQL en fait.  
   Ne me laissez pas tomber !!  :cry:
   Merci à tous !!

mood
Publicité
Posté le 06-08-2001 à 12:24:32  profilanswer
 

n°51221
Fred999
Rabat-joie
Posté le 06-08-2001 à 12:30:10  profilanswer
 

Code :
  1. Mise à jour pour les employés de TELEPHONE déjà présents dans EMPLOYES :
  2. update  EMPLOYES
  3. set     empl.telephone = tele.telephone
  4. from
  5.         EMPLOYES   empl,
  6.         TELEPHONE  tele
  7. where
  8.         tele.ID    = empl.ID
  9. Insertion pour les employés de TELEPHONE non présents dans EMPLOYES :
  10. insert  EMPLOYES (ID, telephone)
  11. select  tele.ID,
  12.         tele.telephone
  13. from
  14.         TELEPHONE    tele,
  15.         EMPLOYES     empl
  16. where
  17.         tele.ID      != empl.ID


 
:hello:

 

[edtdd]--Message édité par Fred999--[/edtdd]

n°51224
xaero
Posté le 06-08-2001 à 12:54:46  profilanswer
 

Merci !
J'ai essayé et :  
  Je suis sous access, d'où (peut être) l'erreur suivante :  
"Erreur de syntaxe (opérateur absent)" :fou: C'est au niveau du FROM que ça coince. Aie aie aie, t'as une idée ? Ou quelqu'un d'autre hein ! Sans le FROM ca marche pas evidemment.  
 
  Bon, je vais manger, on en reparle après  ;)

n°51230
seblamb
Posté le 06-08-2001 à 14:11:30  profilanswer
 

Fred999 a écrit a écrit :

Code :
  1. where
  2.         tele.ID  != empl.ID


 




Déja ça m'étonnerais que ça marche en SQL, en C peut être  :D , mais en SQL il vaut mieux mettre  
 
[code]where
        tele.ID  <> empl.ID[\code]

n°51233
xaero
Posté le 06-08-2001 à 14:21:23  profilanswer
 

Ouais, Seblamb a raison sur ce point. Mais j'ai besoin seulement de la première requete. La syntaxe SQL est :
   UPDATE table
   SET newvalue
   WHERE criteria;
 
   Pas de trace du FROM, car cette requete sert à la MAJ d'un champ selon un critère (ex : hausse de 10%). Et non pas à partir d'un autre champ.
   Si j'enlève la ligne du FROM il prend les empl.telephone et empl.id comme paramètre et je dois rentrer une valeur.
Cette opération est elle possible sous ACCESS :??:

n°51234
xaero
Posté le 06-08-2001 à 14:22:09  profilanswer
 

Je veux dire : cette opération de MAJ à partir d'une colonne d'une autre table ?

n°51236
Fred999
Rabat-joie
Posté le 06-08-2001 à 14:24:04  profilanswer
 

Alorseuh :o ma syuntaxe marcherait trèèès bien sous SQL Server, j'ai pioché dans mes procs stockées.
 
Fallait pas utiliser Access :D

n°51238
irulan
Posté le 06-08-2001 à 14:25:56  profilanswer
 

Ce n'est pas Access qui est en cause, sous Oracle la syntaxe n'est pas valable non plus : j'ai déjà eu ce problème et il est impossible d'utiliser une jointure pour effectuer un update  :sarcastic:

n°51239
seblamb
Posté le 06-08-2001 à 14:26:40  profilanswer
 

Fred999 a écrit a écrit :

Alorseuh :o ma syuntaxe marcherait trèèès bien sous SQL Server, j'ai pioché dans mes procs stockées.
 
Fallait pas utiliser Access :D  




 
Aucun rapport avec Access, l'opérateur différent dans la norme SQL c'est '<>'.  :na:

n°51240
irulan
Posté le 06-08-2001 à 14:30:22  profilanswer
 

Euh, je précise : je parlais de la jointure dans l'update, pas de l'opérateur '!=', qui est reconnu parfaitement sous Oracle.

 

[edtdd]--Message édité par irulan--[/edtdd]

mood
Publicité
Posté le 06-08-2001 à 14:30:22  profilanswer
 

n°51241
Fred999
Rabat-joie
Posté le 06-08-2001 à 14:32:37  profilanswer
 

Bon, alors on va faire les choses comme un goret :  

Code :
  1. insert  EMPLOYES (ID, telephone)
  2. select  tele.ID,
  3.         tele.telephone
  4. from
  5.         TELEPHONE    tele
  6. where
  7.         tele.ID not in (select ID from EMPLOYES)


 
Et != est reconnu sous SQL Server.
 
Et je vous emmerde [:fred999]  
 
Irulan > :hello:

n°51244
xaero
Posté le 06-08-2001 à 14:34:52  profilanswer
 

MAIS ALORS, COMMENT FAIRE POUR MON PB ?????   :pt1cable:
Je veux bien croire que cette syntaxe marche pas mais il y a bien une alternative ? Il y toujours une alternative en principe... une porte de sortie quoi ! :cry:

n°51245
irulan
Posté le 06-08-2001 à 14:35:00  profilanswer
 

Fred999>   :hello: Tiens pendant que tu es là à proposer des trucs qui ne marchent pas ;) tu n'aurais pas une idée pour mon truc de PB, par hasard ?
 
Xaero > Dans ce cas on ne peut pas, et je ne connais aucun moyen de contournement. A part créer une table temporaire (car dans un insert tu peux effectuer un jointure) et la copier dans ta table définitive.

 

[edtdd]--Message édité par irulan--[/edtdd]

n°51253
xaero
Posté le 06-08-2001 à 14:41:30  profilanswer
 

Tu veux dire créer une vue ?  :sarcastic:
L'opérateur INSERT demande le INTO sous ACCESS. Et ca équivaut à insérer des tuples, pas à les mettre à jour. Resultat : tout les numéros de tél sont au début de la table et ensuite on trouve les enregistrements (employes). Pas Top, hein  ? :fou:
   Si la solution est de créer une vue (car une vue sert entre autre à stocker des resultats temporaires) je vais essayer.

n°51257
irulan
Posté le 06-08-2001 à 14:49:11  profilanswer
 

xaero > nan nan ce que je veux dire c'est dans ton script créer une table temporaire (du genre TMP_EMPLOYES) que tu remets à zéro à chaque exécution, qui sera la copie de ta table EMPLOYES, à ceci près que dans le script d'alimentation (qui sera donc en insert) tu pourras utiliser une jointure.
 
D'ailleurs ça se rapproche de ce que proposait Fred999.

 

[edtdd]--Message édité par irulan--[/edtdd]

n°51260
xaero
Posté le 06-08-2001 à 14:59:49  profilanswer
 

J'ai peur de pas tout saisir dans ta soluce. Pour commencer je n'utilise pas de script, étant sous Access. Mais on peut toujours faire des macros qui appellent les requetes.  
   Bon, si j'ai bien compris, on va créer une table temporaire en effectuant la jointure entre emp et tel, puis on delete la table emp pour garder la temporaire. That's it ? or not ?

n°51274
xaero
Posté le 06-08-2001 à 15:27:56  profilanswer
 

Well, j'ai réussi à faire la jointure entre Emp et Tel et stocker les results dans une table Tmp   :sol:
   Je pense que maintenant je vais supprimer de la table EMPLOYES les personnes que je trouve dans cette table. Puis je réinsère ces enregistrements. Si quelqu'un a plus simple, please share !
 
   Mais non, je ne suis pas Aware !  :lol:
 
   Merci encore a ceux qui m'ont aidé ! :hello:  Pour les autres :na:  :lol: :lol: :lol:


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation

  [SQL] J'en appelle aux Dieux du SQL (et aux déesses ;o)

 

Sujets relatifs
[ SQL ] Requête pour avoir les doublons d'une tableautomatisation d'une requete SQL oracle
SQL Server & espacesSQL-php: question sur requete
[SQL] comment faire une requête qui va bien ???a l'aide ! (probleme de base SQL /PHP)
SQL et sysdate[SQL SERVER] Debuger un trigger
SQL....[ASP] Requete SQL c'est koi l'inverse de "order by"
Plus de sujets relatifs à : [SQL] J'en appelle aux Dieux du SQL (et aux déesses ;o)


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR