2010-09-13 10 views
2

J'ai deux tableaux: données et commentairesFusionner deux tables MySQL

data: 
------------------- 
id | name | email | 

pics: 
------------------- 
msg_id | pic | 

Les données sont assosiated par identifiant et id_msg. Comment je peux fusionner ces deux tables en une finale? Editer: certaines lignes dans les données n'ont pas associé une image, et j'ai besoin de les conserver.

+0

On ne sait pas à quoi s'attendre dans le résultat? Est-ce une nouvelle table ou vous avez juste besoin d'une instruction SELECT retournant les données des deux tables? –

+0

juste une nouvelle table. – greenbandit

Répondre

4

Vous pouvez utiliser la syntaxe INSERT INTO ... SELECT:

INSERT INTO final_table 
SELECT id, name, email, pic 
FROM data 
JOIN pics ON (pics.msg_id = data.id); 

Exemple:

vos données actuelles:

CREATE TABLE data (id int, name varchar(20), email varchar(100)); 
INSERT INTO data VALUES (1, 'name1', '[email protected]'); 
INSERT INTO data VALUES (2, 'name2', '[email protected]'); 
INSERT INTO data VALUES (3, 'name3', '[email protected]'); 
INSERT INTO data VALUES (4, 'name4', '[email protected]'); 

CREATE TABLE pics (msg_id int, pic varchar(100)); 
INSERT INTO pics VALUES (1, 'pic1.jpg'); 
INSERT INTO pics VALUES (1, 'pic2.jpg'); 
INSERT INTO pics VALUES (2, 'pic3.jpg'); 
INSERT INTO pics VALUES (2, 'pic4.jpg'); 
INSERT INTO pics VALUES (3, 'pic5.jpg'); 

Votre nouvelle table:

CREATE TABLE final_table (
    id int, name varchar(20), email varchar(100), pic varchar(100) 
); 

INSERT INTO final_table 
SELECT  id, name, email, pic 
FROM  data 
LEFT JOIN pics ON (pics.msg_id = data.id); 

Résultat :

SELECT * FROM final_table; 
+------+-------+---------------+----------+ 
| id | name | email   | pic  | 
+------+-------+---------------+----------+ 
| 1 | name1 | [email protected] | pic1.jpg | 
| 1 | name1 | [email protected] | pic2.jpg | 
| 2 | name2 | [email protected] | pic3.jpg | 
| 2 | name2 | [email protected] | pic4.jpg | 
| 3 | name3 | [email protected] | pic5.jpg | 
| 4 | name4 | [email protected] | NULL  | 
+------+-------+---------------+----------+ 
6 rows in set (0.00 sec) 
+0

désolé mais maintenant je vois un problème, certaines données dans les données n'ont pas d'image, et ont été exclus de la fusion – greenbandit

+0

@greenbandit: Vous pouvez utiliser 'LEFT JOIN' alors au lieu de' JOIN' ... Mise à jour de ma réponse avec un exemple. –

+0

semble comme fonctionne bien, merci encore. – greenbandit

0

Vous avez probablement besoin d'extraire des données de la table et de les joindre en une seule? Donc, vous pouvez utiliser la requête suivante:

SELECT D.*, P.* FROM data D, pics P WHERE D.Id=P.msg_id