12 nov 2015, om 07:02, J Decker: > So I've used CTE to solve a simple problem... I'm tempted to use it to > fix more problems... but I'm wondering how to select different values > at different levels. I know there's like 'select * from table where > column in ( set,of,things) ' but can I index into the set? is there > some sort of way I can specify an array of values? > > would like to do something like ' select value from option_map where > name is ["system","device","com port", "1" ] ' where the program > statement would look more like > > GetOptionValue ( "/system/device/com port/1" ) where the name is > really sort of registry like and variable in length... > > I could probably do some sort of indexing passing that exact string > through and parsing in SQL the substrings of interest based on the > level of the query... but would rather preparse the string.
Below is another possible answer. This uses a recursive cte to split an input full path name into seperate names. create table map (id, name, parent); insert into map values (0, '',''), (1, 'system', 0), (2, 'device', 1), (3, 'com port', 2), (4, '1', 3), (5, '2', 3) ; with walk as ( select 0 as parent, --root '/system/device/com port/1' as path union select id, substr(path,length(name)+2) from walk join map using(parent) where name = substr(path,2,instr(substr(path,2)||'/','/')-1) -- oef ) select parent as id from walk where path='' -- nothing left ;