2011-06-18 78 views
3

我有一張表,其中存儲了所有評論。一些評論是問題,其他 - 答案。 所以,我的表看起來像這樣:Mysql - 加入同一張表的數據

id parent_id message is_answer answered 
1 0   2x2  0   1 
2 1   4  1   0 
3 0   5x9  0   0 
4 1   2x9  0   0 
5 1   2x8  0   1 
6 5   16  1   0 

而作爲一個結果,我想獲得該表:

q_id q_message q_answer 
1  2x2   4 
3  5x9   NULL 
4  2x9   NULL 
5  2x8   16 

所以,我想獲得的所有的問題和他們的答案,如果它們存在。

回答

5

沒有什麼能夠阻止你加入自己的表格。

SELECT q.id AS q_id, q.message AS q_message, a.message AS q_answer 
FROM table AS q 
LEFT JOIN table AS a ON a.parent_id = q.id 
WHERE q.is_answer = 0; 

請注意,這並不完全給輸出你說你想...因爲它顯示了所有問題的答案:

+------+-----------+----------+ 
| q_id | q_message | q_answer | 
+------+-----------+----------+ 
| 1 | 2x2  | 4  | 
| 1 | 2x2  | 2x9  | 
| 1 | 2x2  | 2x8  | 
| 3 | 5x9  | NULL  | 
| 4 | 2x9  | NULL  | 
| 5 | 2x8  | 16  | 
+------+-----------+----------+ 
6 rows in set (0.00 sec) 

您請求的輸出只顯示答案「4」問題1.我不確定這是否是有意的 - 如果是這樣,您需要一些額外的GROUP BY或其他邏輯來篩選出您不想顯示的答案。

2

沒有測試,但是這應該做的伎倆:

select q.id as q_id,q.message as q_message ,a.message as q_answer FROM comments q LEFT OUTER JOIN comments a ON (a.parent_id = q.id and a.is_answer=1 and q.is_answer=0) 

我覺得你的表的設計可以在沒有is_answer列做,你可以只設置PARENT_ID = NULL如果一個問題嗎?

+0

謝謝!添加a.is_answer = 1到ON()取得了訣竅!沒有這個條件,連接只返回有答案的行。你能解釋一下嗎? :) –

+0

這個答案包括輸出中的所有答案作爲問題。當然,這不是打算的。 – Flimzy

+0

我不認爲這是這樣做的a.is_answer = 1,它的左邊------>外面<------- JOIN – Gryphius