concaténation plusieurs bases MySQL

lorsqu'on concatène plusieurs bases MySQL ayant une structure similaire mais dans un ordre différent, ne surtout pas croire que la concaténation est correcte! elle ne fonctionne que si la structure ET l'ordre sont identiques, sinon il prend dans l'ordre seulement

exemple

-- lancer mysql
mysql
-- creer base testA
create database testA;
use testA;
-- creer table A.a
CREATE TABLE `a` (
  `a` text NOT NULL,
  `b` text NOT NULL,
  `c` text NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
 
-- 
-- Contenu de la table `a`
-- 
 
INSERT INTO `a` (`a`, `b`, `c`) VALUES 
('Aa', 'Bb', 'Cc'),
('Cc', 'Cb', 'Ca'),
('Bb', 'Bc', 'Ba');
 
 
-- creer base testB
create database testB;
use testB;
-- creer table B.a
-- noter structure identique mais ordre different
-- 
-- Structure de la table `a`
-- 
 
CREATE TABLE `a` (
  `b` text NOT NULL,
  `c` text NOT NULL,
  `a` text NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
 
-- 
-- Contenu de la table `a`
-- 
 
INSERT INTO `a` (`b`, `c`, `a`) VALUES 
('Bb', 'Bc', 'Ba');
 
 
-- Base de données: `testC`
-- creer base testC
create database testC;
use testC;
-- creer table C.a
-- noter structure identique mais ordre different
-- 
-- Structure de la table `a`
-- 
 
CREATE TABLE `a` (
  `c` text NOT NULL,
  `b` text NOT NULL,
  `a` text NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
 
-- 
-- Contenu de la table `a`
-- 
 
INSERT INTO `a` (`c`, `b`, `a`) VALUES 
('Cc', 'Cb', 'Ca');
 
-------------------------

et maintenant le test

INSERT INTO `testA`.`a`
SELECT *
FROM `testB`.`a` ;

INSERT INTO `testA`.`a`
SELECT *
FROM `testC`.`a` ;

- Resultat de SELECT * FROM `testA`.`a`; :-(

a b c
Aa Bb Cc
Cc Cb Ca
Bb Bc Ba

On voit (notamment) que le champs c de TestC est devenu le champs a de TestA, et que le champs b de TestB est devenue le champs a de TestA

avec le critère "SELECT *" MySQL ne prend compte que de l'ORDRE des noms des champs, pas de leur NOMS

:!: –> prudence, écrire tous les noms des champs

le plus simple pour les récupérer, s'il y en a beaucoup: utiliser phpMyAdmin ou mysql-query-browser et faire un SELECT en choississant tous les champs, puis corriger le script du dessus comme suit

Script propre

INSERT INTO `testA`.`a`
SELECT `a`, `b`, `c` 
FROM `testB`.`a` ;

INSERT INTO `testA`.`a`
SELECT `a`, `b`, `c` 
FROM `testC`.`a`

et maintenant le test

- Resultat de SELECT * FROM `testA`.`a`;

a b c
Aa Bb Cc
Ca Cb Cc
Ba Bc Bc

:-D korrekt!

  • info/concatenation_plusieurs_bases_mysql.txt
  • Dernière modification: 2018/07/18 09:45
  • par radeff