Bonjour,
Je voudrais rajouter le contenu d'une table "X" vers une table "Y" qui contient déjà des enregistrements
Les champs des tables X & Y sont identiques
J'ai essayé cela:
update into Y select * from X
Qui a une idée ? merci
Bonjour,
Je voudrais rajouter le contenu d'une table "X" vers une table "Y" qui contient déjà des enregistrements
Les champs des tables X & Y sont identiques
J'ai essayé cela:
update into Y select * from X
Qui a une idée ? merci
Si vous voulez AJOUTER des lignes (on ne parle pas d'enregistrements dans les bases de données relationnelles mais de lignes), vous voulez donc INSÉRER :Je voudrais rajouter le contenu d'une table "X" vers une table "Y"
...
J'ai essayé cela:
update
Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 INSERT INTO y SELECT * FROM x
Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise la suite Linux Mageïa !
j'ai déjà essayé cette requête qui me retourne un message d'erreur:
Dans les deux tables il y a un champ "ID" avec une valeur "1""#1062 - Duplicate entry '1' for key 1"
Bonjour,
1-
OK. Mais c'est n'importe quoi : c'est un mélange des syntaxes UPDATE / INSERT...
As-tu lu un peu la DOC SQL ?
Ne serait-ce que les bonnes syntaxes de UPDATE / INSERT / DELETE ?
2- Il faut être plus précis(e) dans les termes que tu emploies.
- UPDATE : suppose que les lignes existent déjà dans la 2ème table ?
- INSERT : les lignes n'existent pas, donc on les crée
Si c'est un mélange des deux (des lignes qui existent déjà, et d'autres à ajouter), c'est un peu plus compliqué, surtout s'il existe un index auto-incrémenté :
- faut-il conserver les index de la 1ère table (ou pas ?)
Donc, en exprimant plus clairement ta demande, tu pourrais faire une recherche avec les bons mots-clé.
Comme :
- "copier les lignes d'une table dans une autre"
- "Comment insérer des données d'une table dans une autre table ?"
Dernière modification par Invité ; 27/08/2018 à 10h21.
Oui j'ai recherché avec ces mots clés mais il s'agit toujours de transféré les données de la table X vers une table Y vide
je pense que le pb vient de l'index
Les deux tables ont des enregistrements avec des index auto incrémentés identiques (ID) d'où le message d'erreur
Dans le cas d'un mélange des deux (ce qui généralement le cas), il faut regarder du coté de ON DUPLICATE KEY.
Ce qui donnerait quelque chose du genre : (sans garantie)
Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 INSERT INTO table2 T2 (a, b, c) VALUES ( SELECT T1.a, T1.b, T1.c FROM table1 T1) ON DUPLICATE KEY UPDATE table2 SET a = T1.a, b = T1.b, c = T1.c
Il me semble qu'une autre solution est de passer par une 3ème table, temporaire.
(il faut que je retrouve où j'ai déjà fait ça...)
Avec une table temporaire, voir ce que j'ai suggéré récemment pour l'import d'un CSV où toutes les colonnes ne sont pas renseignées et semble avoir donné satisfaction à la demandeuse.
La solution ON DUPLICATE KEY UPDATE n'était pas applicable.
Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise la suite Linux Mageïa !
il y a la solution de faire mouliner la table X et transférer dans la boucle vers la table Y avec un Insert
et à la fin faire TRUNCATE TABLE 'X' pour vider la table
il y a surement une solution plus simple...
Partager