On Sun, 26 Dec 2021 at 14:37, Joel Jacobson <j...@compiler.org> wrote:


> Let's look at each row your example and see if we can work it out.
> I've added the "FROM permission p" and also "AS [table alias]",
> otherwise the aliases you use won't exist.
>
> > FROM permission p
>
> This row is obviously OK. We now have "p" in scope as an alias for
> "permission".
>
> > LEFT JOIN FOREIGN KEY p->permission_role_id_fkey AS r
>
> This row would follow the FK on "p" and join the "role" table using the
> "permission.role_id" column. OK.
>
> > LEFT JOIN FOREIGN KEY tr->team_role_role_id_fkey AS tr
>
> This is where we fail. There is no "tr" table alias yet! So we cannot
> follow the FK.
>
> The reason why it doesn't work is because the FK is:
> FOREIGN KEY team_role (role_id) REFERENCES role
>
> That is, the FK is on the new table we are currently joining in.
>

Right, sorry, that was sloppy of me. I should have noticed that I wrote
"tr-> ... AS tr". But in the case where the "source" (referencing) table is
already in the join, what's wrong with allowing my suggestion? We do need
another way of joining to a new table using one of its foreign keys rather
than a foreign key on a table already in the join, but it seems the first
case is pretty common.

Reply via email to