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

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

Marsh Posté le 06-08-2001 à 12:24:32    

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 !!

Reply

Marsh Posté le 06-08-2001 à 12:24:32   

Reply

Marsh Posté le 06-08-2001 à 12:30:10    

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]

Reply

Marsh Posté le 06-08-2001 à 12:54:46    

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

Reply

Marsh Posté le 06-08-2001 à 14:11:30    

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]

Reply

Marsh Posté le 06-08-2001 à 14:21:23    

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 :??:

Reply

Marsh Posté le 06-08-2001 à 14:22:09    

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

Reply

Marsh Posté le 06-08-2001 à 14:24:04    

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

Reply

Marsh Posté le 06-08-2001 à 14:25:56    

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:

Reply

Marsh Posté le 06-08-2001 à 14:26:40    

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:

Reply

Marsh Posté le 06-08-2001 à 14:30:22    

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]

Reply

Marsh Posté le 06-08-2001 à 14:30:22   

Reply

Marsh Posté le 06-08-2001 à 14:32:37    

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:

Reply

Marsh Posté le 06-08-2001 à 14:34:52    

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:

Reply

Marsh Posté le 06-08-2001 à 14:35:00    

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]

Reply

Marsh Posté le 06-08-2001 à 14:41:30    

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.

Reply

Marsh Posté le 06-08-2001 à 14:49:11    

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]

Reply

Marsh Posté le 06-08-2001 à 14:59:49    

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 ?

Reply

Marsh Posté le 06-08-2001 à 15:27:56    

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:

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed