3 ms·
EdgeQL lets you do arbitrary joins as well. Here's how you could compute salaries of employees by department even if you for some reason don't have a link betw
by RedCrowbar 5y ago
EdgeQL lets you do arbitrary joins as well. Here's how you could compute salaries of employees by department even if you for some reason don't have a link between Employee and Department:
SELECT Department {
name,
employees := (
SELECT Employee { name, salary }
FILTER Employee.department_name = Department.name
)
}
Links in EdgeQL are merely an abstraction over the fact that most joins in a well-normalized schema are done over primary keys.
- historyloop 5y agoHow do I join tables 1:1 without creating a subfield, i.e.: table1: id, name table2: table1_id, level Desired result: {id, name, level}
- msully4321 5y agoThe most direct implementation of what you want would be: SELECT (Table1.id, Table1.name, Table2.level, Table2.table1_id) FILTER Table1.id = Table2.table1_id; (This has a somewhat annoying extra output of table1_id, which could be projected away if necessary.) If you want to use edgeql's shapes but still keep the essential join flavor, then something like: SELECT (Table1 { id, name }, Table2 { level }) FILTER Table1.id = Table2.table1_id; To make it a little more concrete, you can try this on the tutorial database (https://www.edgedb.com/tutorial https://www.edgedb.com/tutorial) SELECT (Photo {uri}, User {name, email}) FILTER Photo.author.id = User.id; The tutorial database uses links, and so instead of having an author_id we have author.id, but having an author_id property would work just fine---except that then you'd have to do all the joins manually.