#1 Mon 11 January 2016 15:17
- white-shadow90
- Participant actif
- Date d'inscription: 9 Oct 2013
- Messages: 91
[MySQL] - Update d'un champ à partir d'une autre table
Bonjour,
J’essaie de mettre à jour une table à partir d’une autre table par la requête suivante :
Code:
UPDATE ma_base.ma_table1 SET parcelle = CASE WHEN ma_base.ma_table1.rococodadr = ma_base.ma_table2.rococodadr THEN ma_base.ma_table2.parcelle ELSE NULL end;
Et j’obtiens le message d’erreur suivant :
SQL Error[1054] [42S22] Unknown column 'ma_base.ma_table.rococodadr' in 'field list'
Mais lorsque je fais
Code:
SELECT ma_base.ma_table1.rococodadr FROM ma_base.ma_table1
La requête passe.
De la même manière, j'arrive à créer une vue
Code:
CREATE VIEW ma_vue AS SELECT ma_table1.codir, ma_table1.cocom, ma_table1.cifp, ma_table1.numseqart, ma_table1.cinco, ma_table1.typart, ma_table1.cvaft, ma_table1.numimmaft, ma_table1.indrepaft, ma_table1.libvoiaft, ma_table1.basnetcom, ma_table1.basnetcoms, ma_table1.basnetico, ma_table1.basnetdep, ma_table1.basnetcotse, ma_table1.zae1, ma_table1.zae2, ma_table1.zae3, ma_table1.zae4, ma_table1.coticom, ma_table1.cotisyn, ma_table1.cotiico, ma_table1.cotitse, ma_table1.cotitsea, ma_table1.exotse, ma_table1.ttseapp, ma_table1.ttseaapp, ma_table1.totcotib, ma_table1.mprelfvl, ma_table1.mprelths, ma_table1.totcfp, ma_table1.mdegplaf, ma_table1.vlbilp, ma_table1.vlbelm, ma_table1.vliths, ma_table1.vlbeths, ma_table1.perchar, ma_table1.percharera, ma_table1.codrol, ma_table1.zae5, ma_table2.parcelle FROM ma_table1, ma_table2 WHERE ma_table1.rococodadr = ma_table2.rococodadr
mais je n'arrive pas à récupérer ma_vue.ma_table2.parcelle pour la réinjecter dans ma_table1.
Auriez-vous une idée de la provenance du problème ?
Merci d'avance pour votre aide.
Hors ligne
#2 Mon 11 January 2016 15:31
Re: [MySQL] - Update d'un champ à partir d'une autre table
Hello,
Pourquoi un CASE WHEN ?
Un truc comme ça peut-être ?
UPDATE ma_base.ma_table1
INNER JOIN ma_table2
ON ma_table1.rococodadr = ma_table2.rococodadr
SET parcelle = ma_table2.parcelle
-- si besoin de conditions
WHERE
Freelance traitements ETL FME certifié: www.sitdi-france.fr Twitter : @sitdifrance
Site perso ~ www.partir-en-vtt.com
Hors ligne
#3 Mon 11 January 2016 15:43
- white-shadow90
- Participant actif
- Date d'inscription: 9 Oct 2013
- Messages: 91
Re: [MySQL] - Update d'un champ à partir d'une autre table
Bonjour,
Merci pour votre aide mais la requête que vous proposez s’exécute mais semble ne pas aboutir (plus de 2 minutes et toujours rien).
J'ai également essayé la requête :
Code:
UPDATE ma_base.ma_table1 SET parcelle = ma_base.ma_table2.parcelle WHERE ma_base.ma_table1.rococodadr = ma_base.ma_table2.rococodadr
Mais j'obtiens toujours le même message d'erreur
Hors ligne
#4 Mon 11 January 2016 16:03
- Nicolas Ribot
- Membre
- Lieu: Toulouse
- Date d'inscription: 9 Sep 2005
- Messages: 1554
Re: [MySQL] - Update d'un champ à partir d'une autre table
Bonjour,
La syntaxe d'update est:
UPDATE table set champ = valeur
FROM autretable
WHERE conditions
Ici:
Code:
UPDATE ma_table1 t1 SET parcelle = t2.parcelle FROM ma_table2 t2 WHERE t1.rococodadr = t2.rococodadr;
Nicolas
Hors ligne
#5 Mon 11 January 2016 16:33
Re: [MySQL] - Update d'un champ à partir d'une autre table
Il me semblait qu'on ne faisait plus de jointures via le WHERE
Freelance traitements ETL FME certifié: www.sitdi-france.fr Twitter : @sitdifrance
Site perso ~ www.partir-en-vtt.com
Hors ligne
#6 Mon 11 January 2016 16:48
Re: [MySQL] - Update d'un champ à partir d'une autre table
Bonjour,
Merci pour votre aide mais la requête que vous proposez s’exécute mais semble ne pas aboutir (plus de 2 minutes et toujours rien).
J'ai également essayé la requête :Code:
UPDATE ma_base.ma_table1 SET parcelle = ma_base.ma_table2.parcelle WHERE ma_base.ma_table1.rococodadr = ma_base.ma_table2.rococodadrMais j'obtiens toujours le même message d'erreur
Il faut laisser le temps à la requête de terminer. Il y a combien de lignes ?
Freelance traitements ETL FME certifié: www.sitdi-france.fr Twitter : @sitdifrance
Site perso ~ www.partir-en-vtt.com
Hors ligne
#7 Mon 11 January 2016 17:18
- white-shadow90
- Participant actif
- Date d'inscription: 9 Oct 2013
- Messages: 91
Re: [MySQL] - Update d'un champ à partir d'une autre table
J'arrive à quelque chose avec
Code:
UPDATE ma_table1 SET ma_table1.parcelle=(SELECT parcelle FROM ma_table2 WHERE ma_table1.rococodadr = ma_table2.rococodadr);
Il me reste à apporter une correction sur ma_table2 où j'ai constaté qu'un rococodadr renvoie à plusieurs parcelles alors que ce cas ne devrait pas se présenter.
J'ai 31 000 enregistrements environ et au bout de 5 minutes je n'ai toujours rien avec la requête utilisant le join
Quand j'utilise la requête UPDATE ... SET... FROM... j'ai un message d'erreur sur le FROM (SQL error 1064 [42000]
Hors ligne
#8 Tue 12 January 2016 14:24
Re: [MySQL] - Update d'un champ à partir d'une autre table
Salut, essaye de laisse tourner un peu plus longtemps
Code:
UPDATE ma_base.ma_table1 INNER JOIN ma_table2 ON ma_table1.rococodadr = ma_table2.rococodadr SET parcelle = ma_table2.parcelle
Freelance traitements ETL FME certifié: www.sitdi-france.fr Twitter : @sitdifrance
Site perso ~ www.partir-en-vtt.com
Hors ligne
#9 Wed 13 January 2016 09:07
- white-shadow90
- Participant actif
- Date d'inscription: 9 Oct 2013
- Messages: 91
Re: [MySQL] - Update d'un champ à partir d'une autre table
Bonjour,
Cette requête a fonctionné en un peu plus de 15 minutes. L'autre que j'ai noté était plus rapide et j'ai obtenu les mêmes résultats.
Merci pour votre aide.
Hors ligne
#10 Wed 13 January 2016 10:11
Re: [MySQL] - Update d'un champ à partir d'une autre table
Avec un index je pense que cela aurait été plus rapide
Freelance traitements ETL FME certifié: www.sitdi-france.fr Twitter : @sitdifrance
Site perso ~ www.partir-en-vtt.com
Hors ligne