update imbriqué?? est ce possible - Programmation
Marsh Posté le 17-02-2002 à 20:49:47
Si c'est en MySql, il doit y'avoir moyen de le faire avec un REPLACE : http://www.mysql.com/doc/R/E/REPLACE.html
Marsh Posté le 18-02-2002 à 15:29:29
Ca existe WHERE EXISTS sous SQL Server ? Parce que sous Oracle, j'essaierais avec ça mais ce n'est jamais évident les update de ce genre...
A mon avis, ce n'est pas gagné en une requête SQL simple, il faudra surement passer par une procédure...
Marsh Posté le 18-02-2002 à 17:50:16
UPDATE B SET B.genre = A.z FROM B b1, A WHERE b1.genre=A.GENRE
Voir : http://msdn.microsoft.com/library/ [...] z_82n9.asp
Marsh Posté le 18-02-2002 à 22:00:48
je comprend pas tout sur la requete de Mara's dad....
notament sur le b1, c'est quoi un alias??? ne faut il pas les definir avec le mot clés AS???
bref je vais considerer que c'est un alias...et vais essayer comme ça............
putain je suis pas couché encore.....!!
Marsh Posté le 19-02-2002 à 10:09:14
Sous sql server le mot clé
'as' n'est pas obligatoire, c'est donc bien un alias.
Pareil quand tu fais une jointure, tu mets JOIN et le INNER est sous-entendu...
Marsh Posté le 19-02-2002 à 13:09:22
bon ok pour les alias je savais pô!!
Par contre j'ai essayé la requete precedente mais ça marche pas!!
D'ailleurs je suis surpris de voir un FROM avec un update!!!
Fin bref avant de passer sous sql server 7 je bosse sous access...
J'ai voulu tenté une procedure stockée mais à priori cela ne se fait pas avec Access ils appellent ça plutôt des macros ...comme je connais pas je laisse tomber...
Quoi qu'il en soit j'ai bien une solution c'est de faire une petite fonction ASP qui me fasse un update...
Mais j'aurais aimé le faire avec plus de style
Marsh Posté le 19-02-2002 à 13:18:27
peut etre devrais je refourmuler ma requête :
J'ai une table A qui contient un champ genre avec du texte
j'ai une table B qui contient aussi un champ genre avec la même chose que le genre dans A.
Par contre ma table A contient un id_genre, je voudrais donc transferer cette id_genre de B dans la table A à la place de de genre.
Mais bien sûr cet échange ne doit se faire que lorsque A.genre=B.genre....
table A | table B
genre | id_genre genre
----------- | ------------------
banane | 1 banane
avocat | 2 avocat
cerise | 3 cerise
Donc dans A je dois avoir apres modif :
table A
genre
--------
1
2
3
C'est surement possible avec du SQL non???
ps cela ne gene pas d'avoir des chiffres dans un champ texte à la fin...
Marsh Posté le 19-02-2002 à 13:32:50
La requête que je t'ai donné fonctionne pour SQL server.
C'est ce que tu as écrit il me semble !
Pour la syntaxe, je t'ai donné le liens vers la doc MSDN.
Alors, c'est quoi le problème ?
Si c'est que çà marche pas sous Access, falait pas parler de SQL server !
Faudrait savoir de quoi on parle. Si tu as des messages d'erreurs, donne les...
Marsh Posté le 19-02-2002 à 13:43:02
ou lala on s'enerve pas!!
Oui j'ai SQL Server mais je bosse avec Access et quand tout sera fini cela sera transferé sur SQL server...
Mais cette requete je ne vais pas m'en servir dans mon prog, c'est juste pour deplacer des données.....
J'ai bien été voir le lien sur le MSDN que tu m'as donné, mais j'ai pas compris grand chose...
Quand aux messages d'erreur le From avec un update n'est pas accepeter!!
Marsh Posté le 19-02-2002 à 13:53:56
Donc on est bien d'accord : RIEN A VOIR AVEC SQL SERVER !
Version access (pour les tables avec cerise, banane et avocats ! ):
UPDATE B INNER JOIN A ON B.genre = A.genre SET A.genre = [B].[id_genre];
Marsh Posté le 19-02-2002 à 17:28:16
bon ben comme hier je rentre et je test!!
Merci bien
Marsh Posté le 19-02-2002 à 18:45:36
bon aller je fais le lourd
mais ça marche toujours pas!!
voici ma requête (en fait c'est pas des bananes mais des motos..)
UPDATE moto INNER JOIN type_moto ON type_moto.genre = moto.genre SET moto.genre = [type_moto].[id_genre];
Bon j'ai compris la requête (c'est déja ça !)mais quand j'execute ma requête il me demande de lui donner une valeur de type_moto.genre (pour essayer je lui en ai donné une , tout se passe bien sauf qu'il fait rien )
Marsh Posté le 19-02-2002 à 19:07:39
grosmethos a écrit a écrit : bon aller je fais le lourd mais ça marche toujours pas!! voici ma requête (en fait c'est pas des bananes mais des motos..) UPDATE moto INNER JOIN type_moto ON type_moto.genre = moto.genre SET moto.genre = [type_moto].[id_genre]; Bon j'ai compris la requête (c'est déja ça !)mais quand j'execute ma requête il me demande de lui donner une valeur de type_moto.genre (pour essayer je lui en ai donné une , tout se passe bien sauf qu'il fait rien ) |
il fallait faire :
UPDATE B INNER JOIN A ON B.genre = A.genre SET A.genre = [B].[id_genre];
et tu as fait
UPDATE B INNER JOIN A ON B.genre = A.genre SET B.genre = [A].[id_genre];
non ?
Marsh Posté le 19-02-2002 à 21:06:10
Yep, je pense aussi que tu t'es trompé dans les champs !
Montres nous donc ENFIN la VRAI structure des tables !
Avec les bonnes infos (y s'rait temps) on va p't'être pouvoir faire quelque-chose
Marsh Posté le 19-02-2002 à 23:31:23
soyons fou !!
Moto | type_moto
genre | id_genre id_marque genre
----------- | -----------------------------
GSXR | 1 12 GSXR
CBR | 2 24 CBR
VFR | 3 46 VFR
Donc dans la tale Moto champ genre
je veux remplacer GSXR par 1
CBR par 2
VFR par 3
Voci exactement mes tables...
Marsh Posté le 20-02-2002 à 11:39:40
Je ne comprends pas ton PB !
Chez moi, çà marche avec çà :
UPDATE moto INNER JOIN type_moto ON type_moto.genre = moto.genre SET moto.genre = [type_moto].[id_genre];
ou çà :
UPDATE type_moto INNER JOIN moto ON type_moto.genre = moto.genre SET moto.genre = type_moto.id_genre;
Mon test ici : http://www.surleau.com/temp/bd1.mdb
Marsh Posté le 20-02-2002 à 14:48:47
je te remercie pour ton lien!! trop cool!!
bon j'ai telechargé et j'ai regardé fait des tests...
alors avec ta base ça marche nickel chrome (c'est assez ennervant d'ailleurs) par contre avec la mienne, marche pô!! il me demande de lui rentrer un numéro type_moto.genre
Je vais regarder d'encore plus prés...mais c'est assez strange !
Marsh Posté le 20-02-2002 à 15:13:44
Cà doit-êtreun PB de type de donnée. Dans mon exemple, tous les champs sont de types texte.
Marsh Posté le 20-02-2002 à 17:28:09
ben non j'ai changé le id_genre de text en numeric et sa passe quand même trés bien.....
JE me demande si c'est aps une histoire de redondance comme j'ai plusieurs fois GSXR ou CBR peut etre...
je vais essayer avc un truc unique!!
Marsh Posté le 20-02-2002 à 17:30:53
bon quelque chose doit m'echapper!!
car il me semble que les conditions sont les memes donc que la requête devrait marcher aussi bien chez toi que chez moi....
mais non....
putain ça m'ennerve!!
Marsh Posté le 20-02-2002 à 17:42:58
en faisant le bourrin et en imprtant les tables sur t base access, bien j'ai le meme bleme , il y a donc quelque chose qui m'echappe!!
Marsh Posté le 20-02-2002 à 17:46:01
Si tu veux, je peux regarder, mais faut m'envoyer ta base !
Marsh Posté le 20-02-2002 à 18:26:29
MEA COULPA!!]
Heureuement que j'ai t'ai pas envoyé ma base je pense que le FORUM entier t'aurais entendu hurler
Tout ça pour dire que je viens de trouver ce qui deconnait et bien sûr c'etait moi!!
J'avais pas nommé genre dans type_moto, mais id_genre, et du coup il manquait une info!!
Je suis lourd, ça fait 30 fois que je le li et j'ai rien vu!! sauf maintenant!!
Bon en tout cas MERCI bien, je vais pouvoir coder mon ASP tranquille maintenant....
Pour ceux que ça interesse le site en question c'est wwww.labeloccasion.com si vous cherchez une moto, aller voir les quelques photos....
Le menu de recherche notamment sur le modèle devrait être plus clair ( le genre pour ceux qui ont participé au topic !!)
Les vendeurs pour inserer une moto genre 750 GSXR on saisi plusieurs dénomination pour le même type de machine :
750 GSXR, GSXR 750, GSXR, GSX 750 R etc etc....
donc je vais uniformiser le tout avec un menu déroulant qu'il pourront alimenter eux même....
Bon je devais rendre le job mardi, j'espère finir ce soir!!
Merci encore une fois
@+
Marsh Posté le 10-03-2002 à 21:47:09
Mon dieu quel bidouillage...
En faisant ainsi si tu effaces une entree dans ta table A tu n'as aucun moyen de savoir si cette entree est utilisee ou non dans B ou toute autre table, impossible de faire un cascade ni rien... donc verifs a la main ou par triggers donc lenteur et integrite zero.
Tu devrais reprendre ta modelisation en utilisant des foreign keys, puis ensuite transferer les donnees d'une BDD a l'autre. J'espere que SQL Server en est capable, je n'utilise qu'Oracle et franchement je me comprends et me felicite ...
Comme quoi il faut modeliser ses BDD correctement AVANT et pas patcher APRES...
Courrage !
Marsh Posté le 17-02-2002 à 18:55:07
Salut
bon je voudrais mettre à jour une table, en fonction de données dans une autre table...
Je m'explique dans la table A j'ai un champ genre
Dans le table B j'ai aussi un champ genre
J'aimerais remplir le champ genre de B par un champ Z de A en fonction que A.genre=B.genre si cette condition est verifié je fais le remplacement!!
Est ce possible avec une requête SQL???