[英]One SQL query to show parent records and their child records?
我有一個樹形結構,如下所示
Table1
- Iron
+ Land Vehicle
+ Water Vehicle
+ Air Craft
Select * from Table1 Where Type = 'Vehicle'
將給出以下結果。
Land Vehicle
Water Vehicle
Air Craft
但是展開時的實際結構如下所示,
Table1
- Vehicle
- Land Vehicle
Car
Van
Bus
- Water Vehicle
Boat
Ship
- Air Craft
Jet
Helicopter
上面的數據庫表看起來像,
Item Type
King Bed Bed
Double Bed Bed
Steel D/Bed Double Bed
Land Vehicle Vehicle
Car Land Vehicle
Van Land Vehicle
Bus Land Vehicle
Water Vehicle Vehicle
Boat Water Vehicle
Ship Water Vehicle
Air Craft Vehicle
Jet Air Craft
Helicopter Air Craft
Arm Chair Chair
結果應為所有車輛,結果應如下所示。
Land Vehicle
Car
Van
Bus
Water Vehicle
Boat
Ship
Air Craft
Jet
Helicopter
基本上,所需的查詢需要執行的操作是選擇Vehicle類型的所有內容,然后將結果集作為搜索條件,然后再次選擇。 例如,如果有三種類型的車輛,那么下一步應該是將這三種車輛一個接一個,並檢查這三種車輛的下方是否有東西。 如果有的話,一個接一個地搜索,直到樹結構結束。
select distinct(type)
from table1
where type like '%Vehicle%'
or type like '%Craft%';
這樣的事情應該可以工作,但是我會在您的桌子設計上工作。 類型應該只說“車輛”,“床”,“椅子”等,然后另一個字段(例如Type2)應該具有“土地”,“空氣”,“水”,“家具”或類似名稱。
我個人將Type1標識為“家具”,而Type2將其標識為“椅子”。
在您最近發表評論之后:
select item, distinct(type)
from table1
where type like '%Vehicle%'
where type like '%Craft%';
嗨Sanjaya Weerakkody,
給定數據模型(較差)的設計,很難找到一種有效的方法來完成您想要的事情。 您可以應用這樣的內容;
with Category AS
(
SELECT DISTINCT [Type] as label, [Type]
FROM table1 WHERE [Type] like '%Vehicle%' OR [Type] like '%Air Craft%')
,
Aux as
(
SELECT 0 as auxToOrder, label, [type] FROM Category
UNION
SELECT 1 as auxToOrder , item, [type] FROM Table1 WHERE [Type] like '%Vehicle%' OR [Type] like '%Air Craft%'
)
select auxToOrder, [type], label
from Aux
Order by [type], auxToOrder
結果
auxToOrder type label
0 Air Craft Air Craft
1 Air Craft Helicopter
1 Air Craft Jet
0 Land Vehicle Land Vehicle
1 Land Vehicle Bus
1 Land Vehicle Car
1 Land Vehicle Van
0 Vehicle Vehicle
1 Vehicle Air Craft
1 Vehicle Land Vehicle
1 Vehicle Water Vehicle
0 Water Vehicle Water Vehicle
1 Water Vehicle Boat
1 Water Vehicle Ship
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.