2014-02-15 28 views
0

我的問題有點虛僞,但SQL從來不是我的一杯茶。 我有一個簡單的表,有3列:id, name, parent_id(指同一個表中的一個id)。mySQL自我優雅地加入

我只是想獲得相關的搜索結果中的HTML頁面來顯示它們: ID /名稱/父名稱

我可以查詢如下:

select id, name, parent_id from fields 
union 
select a.id, a.name, b.name 
from fields a, fields b 
where b.parent_id = a.id; 

,並做一些測試,但我可以看出它存在一些更優雅的方式。

Thx。

+0

請發表你有tried.Then代碼,我可以幫你糾正 –

回答

2

該查詢最好通過使用LEFT JOIN來實現。這樣,您仍然可以返回沒有parent_id的字段,即NULL。您還需要使用別名(示例中爲parent_name)選擇parent_name。這將允許您以編程方式引用結果的名稱,而不是數字列索引(如果PHP是您選擇的語言,則爲$row->parent_name vs $row[2])。

SELECT f1.id, f1.name, f2.name parent_name 
FROM fields f1 
LEFT JOIN fields f2 ON f2.id = f1.parent_id 

http://sqlfiddle.com/#!2/a9632/1/0

+0

+1的'LEFT JOIN'。 OP在其原始查詢('id','name','parent_id')中已經有3個不同的列別名。 –

+0

謝謝!正是我需要的。 – user1074922

0
SELECT A.id AS ID, A.name AS Name, B.name AS Parent 
FROM fields A, fields B 
WHERE A.parent_id = B.id