Subject | Recursive query |
---|---|
Author | |
Post date | 2014-06-05T09:30:50Z |
Hi,
I have a table with the following DDL:
CREATE TABLE LOCALITY (
ID INTEGER NOT NULL,
PARENT_ID INTEGER,
CT_NODETYPES_ID INTEGER,
DESCRIPTION VARCHAR(30),
);
The foreign key: CT_NODETYPES_ID refers to a table CT_NODETYPES with the following potential values:
ID | DESCRIPTION |
1 | Country |
2 | Province |
3 | Farm registration districts |
4 | District Municipality |
5 | Metropolitan Municipality |
6 | Local Municipality |
Typical data for LOCALITY are:
ID | PARENT_ID | CT_NODETYPES_ID | DESCRIPTION |
1 | 1 | South Africa | |
2 | 1 | 2 | CONTINENTAL SHELF SOUTH AFRICA |
3 | 1 | 2 | EASTERN CAPE |
4 | 1 | 2 | FREE STATE |
5 | 1 | 2 | GAUTENG |
6 | 1 | 2 | KWAZULU-NATAL |
7 | 1 | 2 | LIMPOPO |
8 | 1 | 2 | MPUMALANGA |
9 | 1 | 2 | NORTH WEST |
10 | 1 | 2 | NORTHERN CAPE |
11 | 1 | 2 | WESTERN CAPE |
128 | 10 | 3 | BARKLY WEST |
129 | 10 | 3 | BRITSTOWN |
130 | 10 | 3 | CALVINIA |
146 | 11 | 3 | BEAUFORT WEST |
147 | 11 | 3 | BELLVILLE |
148 | 11 | 3 | BREDASDORP |
178 | 9 | 4 | Bojanala |
179 | 7 | 4 | Capricorn |
180 | 9 | 4 | Central |
181 | 9 | 4 | Bophirima |
182 | 5 | 5 | Ekurhuleni |
183 | 5 | 5 | Johannesburg |
184 | 5 | 6 | Mogale |
185 | 7 | 4 | Mopani |
186 | 7 | 4 | Sekhukhune |
187 | 7 | 4 | Vhembe |
188 | 7 | 4 | Waterberg |
189 | 9 | 4 | Southern |
190 | 5 | 5 | Tshwane |
I then typically use (as a foreign key) a record from LOCALITY at the lowest level, e.g. ID = 148 as the locality (farm registration district) of an abandoned mine or ID = 184 as the locality (Local municipality) of a unsafe mine opening.
When I display the data in a grid of a web application or in a column of a report, I also want to display the province (ID = 2 in table CT_NODETYPES)
I also want to generate stats from the mine table, e.g.
Select Province_Name, Mine_Name, Count(ID) as Total from V_MINES
where Province_ID = 4
Group by Province_Name, Mine_Name
V_MINES is a view spanning several tables.
The problem I have is that (in the MINES table) I do not store the ID of the provinces but I store the ID of the farm registration districts (a child node of the province node).
In the table for unsafe mine openings, I store the ID of local, metropolitan or district municipality.
My use, and knowledge, of recursive common table expressions (CTE) is limited to iterate downwards from a node in a tree-structure (used as foreign key in a table).
Now what I'm actually want is to look up the parent at a certain level (or classified as a certain type) of a "lower" record (node) in a tree-structure.
Surely there must be a way to solve this problem?
Regards,
Nols Smit
(Council for Geoscience, South Africa)