2010-09-13 130 views
2

我有兩個表:數據和註釋合併兩個MySQL表

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

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

的數據由ID和MSG_ID的產生密切相關。我如何將這兩張表合併成最後一張?

編輯:數據中的某些行沒有關聯圖片,我需要保留它們。

+0

你不清楚你期望的結果是什麼?它是一個新表還是隻需要從兩個表中返回數據的SELECT語句? – 2010-09-13 22:10:52

+0

只是一個新表。 – greenbandit 2010-09-14 17:48:37

回答

4

您可能需要使用INSERT INTO ... SELECT語法:

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

例子:

您當前的數據:

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'); 

你的新表:

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); 

結果:

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

對不起,但現在我看到一個問題,數據中的某些數據沒有圖片,也沒有合併 – greenbandit 2010-09-14 17:44:34

+0

@greenbandit:您可能想使用'LEFT JOIN'來代替'JOIN' ...更新我的答案舉一個例子。 – 2010-09-14 18:01:59

+0

似乎工作正常,再次感謝。 – greenbandit 2010-09-14 18:20:40

0

可能您需要從這兩個表中獲取數據並將它們合併到一個表中?所以你可以使用下面的查詢:

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