3 ms·
You do joins when you traverse schema type paths in EdgeQL, it's just that the actual joins are implicit (well, compared to SQL): SELECT User { email,
by 1st1 5y ago
You do joins when you traverse schema type paths in EdgeQL, it's just that the actual joins are implicit (well, compared to SQL):
SELECT User {
email,
preferences: {
name,
value
}
} FILTER .id = '...'
E.g. in the above example we'd join the underlying User and Preferences tables for you.
You can also do cross joins and all other funky stuff.
- AlphaSite 5y agoHow would you represent a self join?
- RedCrowbar 5y agoIf 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) }
- AlphaSite 5y agoThanks!
- singpolyma3 5y agoExample 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 ```