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. Autoentrepreneur.
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. Autoentrepreneur.
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...
C'est justement ce que j'ai déconseillé dans la discussion dont j'ai mis le lien dans mon précédent message !
Si la table est grosse, ce sera très lent et ça bloquera la table pour les autres utilisateurs.
Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
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 !
Et bien regardez au dessus la solution INSERT ... ON DUPLICATE KEY UPDATE et, si elle est inapplicable comme dans le cas de l'autre discussion que j'ai citée, utilisez ma solution.
Ou alors vous exprimez mal les paramètres de votre besoin.
Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
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 !
C'est souvent le problème avec apicultrice : elle est avare en code et en explications...
Si on ne lui demande pas, elle ne montre rien.
C'est le 12ème message, et on n'a toujours pas vu :
- d'explications plus précises, suite à nos réponses
- la structure des tables (éventuellement)
- les requêtes qu'elle a testées (avec de "vraies" données)
Il faut que tu regardes mon site:
http://ruches.montminoises.free.fr/index.php
c'est justement pour simplifier les explications !!!
Car il y a beaucoup de champ et de tables....
Pas facile après pour donner des explications précises dans un contexte fourni
En fait pour donner des explications plus contextuelles, comme mon speudo le précise, je suis apicultrice
Problématique:
Lorsque j'ai un nouvel essaim, je le place dans une ruchette 6 cadres dont toutes les informations sont placées dans une table ex: Ruche34 qui comprend toute les opérations effectuées sur cette ruchette
Lorsque l'essaim grossit il faut le placer dans une ruche (12 cadres) et l'idée consiste à transférer toutes ses infos vers la table de ruche ex: Ruche19 et aussi vider les infos de la table de la ruchette (Ruche 34) afin qu'elle serve à un nouvel essaim
J'suis limpide ?
A+ et merci pour toute tes réponses et ta patience
C'est donc un problème de conception de la base de données mais qui sera lourd à corriger !
Si vous voulez faire les choses bien, il va falloir passer par le forum Schéma.
Quelle est la structure d'une table RucheX ?
Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
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 !
C'est vrai qu'au début c'était plutôt un jeu pour faire un petit "truc" et vite on se prends au "jeu" et l'application grossit ....
J'aurais dû utiliser Merise ou équivalent comme appris à l'école ...il y a ....ans
Voilà ! C'est peut-être le moment de s'y mettre parce que j'ai l'impression que vous utilisez le SGBD comme un tableur !J'aurais dû utiliser Merise ou équivalent
Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
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 !
Ceci dit, vu le besoin exprimé :
Une adaptation de ma méthode expliquée dans l'autre discussion est valable :Lorsque l'essaim grossit il faut le placer dans une ruche (12 cadres) et l'idée consiste à transférer toutes ses infos vers la table de ruche ex: Ruche19 et aussi vider les infos de la table de la ruchette (Ruche 34) afin qu'elle serve à un nouvel essaim
On peut ensuite, si besoin, envoyer les données de la Ruche34Save dans une autre table avec le même principe.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 -- 1) Copie de la table destinataire (Ruche34 dans l'exemple donné). CREATE TABLE Ruche34Save SELECT * FROM Ruche34; -- 2) Vidage de la table destinataire TRUNCATE TABLE Ruche34; -- 3) Copie de la table source vers la table destinataire INSERT INTO Ruche34 SELECT * FROM Ruche19;
Si on n'a plus besoin des données d'une table RucheX :
Code : Sélectionner tout - Visualiser dans une fenêtre à part TRUNCATE TABLE RucheX;
Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
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 !
Bonsoir, @apiculture tu veux faire du cafouillage dans ta BD et ça peut te coûter chère plutard. Tu cherches à bricoler ta BD en voulant la modifier avec des requêtes qui peuvent tout foirer.
Je te conseil de reprendre ta BD à zéro. Oui c'est fastidieux mais ça vaut le coup.
Cordialement.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager