2015-08-22 31 views
0

我有表1顯示產品之間的子和父母關係。如何使用sql獲取輸出表?基本上,輸入表顯示B是A的孩子,B1和B2是B的孩子。輸出也需要顯示以及B1和B2是A的子代。如何在sql表中輸出父子關係?

+1

什麼是數據庫平臺? – OldProgrammer

+0

我需要做的是ANSI sql格式。只要沒有使用數據庫特定的功能,就可以在任何平臺上完成。 – rookie

+0

[SQL for hierarchical relationship]的可能重複(http://stackoverflow.com/questions/11382866/sql-for-hierarchical-relationship) – Bulat

回答

0

我相信你需要是hierarchical queries

舉個例子,你可以這樣做:

SELECT childproduct, parentproduct 
FROM product_table 
START WITH parentproduct = 'Product A' 
CONNECT BY PRIOR childproduct = parentproduct; 

注意:這假定你知道root(頂級)元素是 '產品A'。儘管它也可能沒有它。

+0

這隻會返回立即彼此相關的子對父對:來自您的查詢的結果將是: CHILD \t PARENT 產品B \t產品A ... 產品B1 \t產品B ... 產品B2 \t產品B ... 產品d \t產品B ... 產品D1 \t產品d ... 產品E1 \t產品D1 ... 產品E2 \t產品D1。 .. 產品C \t產品A ... – Sterls

+0

@Sterls感謝您指出。而且,在sqlfiddle上籤出你的答案 - 這真是太酷了!我無法自己測試答案,因爲我的筆記本電腦沒有oracle。 – Bajal

+0

沒問題:)你應該可以在頂部的菜單欄上更改sql提琴上的數據庫引擎,並用MySQL進行測試。 – Sterls

0

回答你的問題是,在這個sqlfiddle所示:http://sqlfiddle.com/#!4/87657/61

你需要使用一個層次查詢,如下圖所示:

SELECT ChildProduct, CONNECT_BY_ROOT ParentProduct 
FROM table_name 
WHERE LEVEL >= 1 
CONNECT BY PRIOR ChildProduct = ParentProduct 

|兒童| CONNECT_BY_ROOTPARENT |
| ------------ | ----------------------- |
|產品B |產品A |
|產品B1 |產品A |
|產品B2 |產品A |
|產品C |產品A |
|產品D |產品A |
|產品D1 |產品A |
|產品E1 |產品A |
|產品E2 |產品A |
|產品B1 |產品B |
|產品B2 |產品B |
|產品D1 |產品D |
|產品E1 |產品D |
|產品E2 |產品D |
|產品E1 |產品D1 |
|產品E2 |產品D1 |

+0

這是ANSI sql格式嗎?或者這是針對Oracle的?謝謝。 – rookie