How would you represent a self join?
Re:EdgeDB: EdgeQL
by RedCrowbar on Saturday July 10, 2021 @04:40PM
(#27796283)
If given a recursive schema like this:
type Tree {
property value -> str
link parent -> Tree
}
you'd traverse the link as usual: SELECT Tree {
value,
parent: {
value
}
}
FILTER .parent.parent.parent.value = 'foo'
If there's a need to self-join on an arbitrary property, then you could use a `WITH` clause to explicitly bind the two sets: WITH
T1 := Tree,
T2 := Tree
SELECT
T1 {
similarly_valued := (SELECT T2 FILTER T1.value = T2.value)
}Thanks!
Re:EdgeDB: EdgeQL
by singpolyma3 on Saturday July 10, 2021 @07:42PM
(#27797280)
Example from the cheatsheet:
``` WITH P := Person SELECT Person { id, full_name, same_last_name := ( SELECT P { id, full_name, } FILTER # same last name P.last_name = Person.last_name AND # not the same person P != Person ), } FILTER EXISTS .same_last_name ```
You can also do cross joins and all other funky stuff.