In a nutshell, I am trying to return all distinct (3rd level) entries in a path; provided the entry has 3 slashes. That statement alone makes me think I've over-complicated this, but I can't see a way around the extra ceremony here.
Given "character" table:
id | role | path
===================
0 | hero | one/two/luke
1 | hero | one/two/wicket/chak
2 | hero | one/two/wicket/den/aqi/bet
3 | grifter | one/two/han/frozen
4 | hero | one/two/leia/cgi
5 | hero | one/two/c3po/mem_wipe
Expected:
wicket, leia, c3po
Query:
SELECT DISTINCT (STRING_TO_ARRAY(c.path,'/'))[3]
FROM character c
WHERE c.role='hero'
AND c.path IN
(SELECT path FROM character c WHERE role='hero' AND c.path like '%/%/[INPUT]/%');
I am stuck trying to figure out how to formulate this query. If I replace "[INPUT]" with "wicket", I get the expected "wicket" returned, but I want wicket, leia and c3po (and anything else) to be returned.