Page 1 sur 1

[Résolu] Create TEMPORARAY TABLE à partir de 2 tables temp.

Posté : 09 mai 2012, 16:38
par Patriboom
Bonjour,

je cherche depuis un bon moment ici et ailleurs comment fusionner deux tables complètement différentes.
La solution sur laquelle je planche actuellement est de créer deux tables temporaires à structures semblables pour ensuite les fusionner dans une troisième.

Voilà où j'en suis: la création des deux premières tables temporaires va très bien, mais lorsque vient temps d'exploiter la troisième, j'obtiens ce message d'erreur #1168 - Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist

Les recherches sur internet me mènent à vérifier la structure, définir les index, définir le type des tables.
J'ai donc ajouter l'option "engine=MyISAM" à mes commandes, j'ai aussi défini des index.
Voici les commandes MySQL que j'essaie dans ma fenêtre phpmyadmin
CREATE TEMPORARY TABLE Actis ENGINE=MyISAM SELECT (id_activ + 100000) AS id, "a" AS Genre, LaDate AS LaDate, Titre AS Titre FROM plongee_activites  WHERE MONTH( LaDate ) = 5 AND YEAR(LaDate) = 2012;
ALTER TABLE Actis ADD Key(id); 
SELECT * FROM Actis; 

CREATE TEMPORARY TABLE Cours ENGINE=MyISAM SELECT cours_id AS id, "c" AS Genre, cours_dteDeb AS LaDate, cours_titre AS Titre FROM plongee_cours  WHERE MONTH( cours_dteDeb ) = 5 AND YEAR( cours_dteDeb ) = 2012; 
ALTER TABLE Cours ADD Key(id); 
SELECT * FROM Cours; 

CREATE TEMPORARY TABLE Tout (`id` INT NOT NULL, Genre CHAR(1), `LaDate` DATE , `Titre` CHAR( 30 ) NOT NULL, INDEX(id)) TYPE=MERGE UNION=(Actis,Cours); 
SELECT * FROM Tout; 
Les commandes SELECT portées sur les deux premières tables temporaires n'y sont qu'à des fins de vérification.
Notons cependant le résultat de la première - même si elle contient ENGINE=MyISAM:
unknown table status: TABLE_TYPE
unknown table status: Comment


Je soupçonne que ce soit une piste de solution, mais je n'arrive pas à imposer un TABLE_TYPE à cette table, croyant l'avoir fait dans ma commande.

Merci à l'avance de votre aide.

Re: Create TEMPORARAY TABLE à partir de deux tables temporai

Posté : 09 mai 2012, 16:53
par Patriboom
Bonjour à nouveau,

il semble que la solution suivante fonctionne:
CREATE TEMPORARY TABLE Actis ENGINE=MyISAM SELECT (id_activ + 1000000) AS id, "a" AS Genre, LaDate AS LaDate, Titre AS Titre FROM plongee_activites  WHERE MONTH( LaDate ) = 5 AND YEAR(LaDate) = 2012;
ALTER TABLE Actis ADD Key(id); 
SELECT * FROM Actis; 
CREATE TEMPORARY TABLE Cours ENGINE=MyISAM SELECT cours_id AS id, "c" AS Genre, cours_dteDeb AS LaDate, cours_titre AS Titre FROM plongee_cours  WHERE MONTH( cours_dteDeb ) = 5 AND YEAR( cours_dteDeb ) = 2012; 
ALTER TABLE Cours ADD Key(id); 
SELECT * FROM Cours;
CREATE TEMPORARY TABLE Tout ENGINE=MyISAM SELECT * FROM Actis;
INSERT INTO Tout SELECT * FROM Cours;
SELECT * FROM Tout; 
Merci de votre attention