2012-06-14 134 views
2

我有兩個表一個與ID和NAMEMySQL查詢同一列兩次

表1

ID | NAME 
1 | first 
2 | second 
3 | third 

並用ID和父ID的XREF表

表2

ID | PARENT ID 
1 | 0 
2 | 1 
3 | 2 

,我想要像這樣兩次檢索NAME:NAME |父名稱

如果有可能去三個層次深,但具有相同的2列的表是這樣的:

結果表

NAME | PARENT NAME 
first | NULL or EMPTY or this line the not showing at all 
second | first 
third | second 

...然後我想弄清楚這也是。

+0

對於缺少行,你應該看一看外連接(HTTP:// EN。 wikipedia.org/wiki/Join_(SQL)#Outer_joins)。關於「深度」,我認爲我沒有正確理解你需要什麼,所以請儘可能添加更多細節和示例。 – Morfic

+0

對於3個級別,只需添加另一個連接即可。你試圖做的是在你的情況下,你有多層表,但這個概念仍然是類似的分層查詢http://stackoverflow.com/questions/8104187/mysql-hierarchical-queries。 – xQbert

回答

1
select t1.Name, t12.Name from 
table1 t1 
inner join table2 t2 on t1.ID = t2.ID 
inner join table1 t12 on t2.ParentID = t12.ID 

這將只返回2行。如果你想擁有第一行(ID = 1),你只需要outer join

+0

謝謝!我一整天都在想這件事,而我自己也無法解決。再次感謝 –

1

考慮將parentid放在第一個表格中作爲自引用關係,而不是爲其分配一個表格。

例:

表1

ID | PARENTID | NAME 
--------------------------- 
1  NULL   first 
2  1   second 
3  2   third 

這樣,你只需要加入表本身,而不是通過3臺去。 (但是,這是假設在表1的行只能有一個單親家庭,而你的設計允許一行在同一時間有多個父)

但對於你的表結構,這將工作:

SELECT 
    a.name, 
    c.name AS 'PARENT NAME' 
FROM 
    table1 a 
LEFT JOIN 
    table2 b ON a.id = b.id 
LEFT JOIN 
    table1 c ON b.parentid = c.id 

但是,如果你在同一個表引用id進行限制的parentid,該SQL將減少到這一點:

SELECT 
    a.name, 
    b.name AS 'PARENT NAME' 
FROM 
    table1 a 
LEFT JOIN 
    table2 b ON a.parentid = b.id 
+0

我無法修改表,因爲數據庫連接到一個夥伴的web服務,它遵循這個結構,當然它不是由我做的:)但感謝您的時間和你的幫助! –

+0

沒問題!很高興你有它的工作! =) –