Re: Foreign key joins revisited

From: Isaac Morland <isaac(dot)morland(at)gmail(dot)com>
To: Joel Jacobson <joel(at)compiler(dot)org>
Cc: PostgreSQL Developers <pgsql-hackers(at)lists(dot)postgresql(dot)org>
Subject: Re: Foreign key joins revisited
Date: 2021-12-26 20:49:42
Message-ID: CAMsGm5dWTfFZe+U+ty1vmx3FeuCqr1Pfb0PyB6JhY9FzOWKN=Q@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

On Sun, 26 Dec 2021 at 14:37, Joel Jacobson <joel(at)compiler(dot)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.

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Joel Jacobson 2021-12-26 21:00:37 Re: Foreign key joins revisited
Previous Message Joel Jacobson 2021-12-26 19:37:12 Re: Foreign key joins revisited