Re: Join condition parsing puzzle

Поиск
Список
Период
Сортировка
От Tom Lane
Тема Re: Join condition parsing puzzle
Дата
Msg-id 12727.1535061063@sss.pgh.pa.us
обсуждение исходный текст
Ответ на Join condition parsing puzzle  (Mark Jeffcoat <jeffcoat@alumni.rice.edu>)
Ответы Re: Join condition parsing puzzle  (Mark Jeffcoat <jeffcoat@alumni.rice.edu>)
Список pgsql-general
Mark Jeffcoat <jeffcoat@alumni.rice.edu> writes:
> SELECT *
> FROM relation_a
> LEFT JOIN relation_b
> JOIN relation_c
> ON (relation_c.id_p = relation_b.id_p)
> ON (relation_a.id_c = relation_b.id_c AND relation_a.id_v = relation_b.id_v);

> I would have claimed before seeing this example that it wasn't even
> grammatical; I thought the only legal place to write the ON clause was
> immediately after the JOIN. Apparently not.

> How should I read this query?  I'd appreciate any help understanding this.

You read it as

SELECT *
FROM
  relation_a
  LEFT JOIN (relation_b
             JOIN relation_c
             ON (relation_c.id_p = relation_b.id_p))
  ON (relation_a.id_c = relation_b.id_c AND relation_a.id_v = relation_b.id_v);

There's no other valid way to parenthesize it, so that's what
the parser does.

            regards, tom lane


В списке pgsql-general по дате отправления:

Предыдущее
От: Nikolay Samokhvalov
Дата:
Сообщение: Re: Upgrade/Downgrade
Следующее
От: Laurenz Albe
Дата:
Сообщение: Re: Is my text_pattern_ops index working for a LIKE prefix searchwith column reference?