Обсуждение: How Do You Do a Three Way Join?

Поиск
Список
Период
Сортировка

How Do You Do a Three Way Join?

От
kvnsmnsn@cs.byu.edu
Дата:
I've got three tables, <jqz>, <zqj>, and <abc>.  I can do a
<jqz j RIGHT JOIN zqj z> and a <zqj z LEFT JOIN abc a>, but is there a
way to do a three-way join to get the columns of all three tables?  Of
course I could do one of those former two joins and then join the out-
put table to the third table, but is there a way to do it without cre-
ating the intermediate table?

I tried:

     SELECT
         j.abc, j.def, z.xyz, a.ghi
       FROM
         jqz j RIGHT JOIN zqj z LEFT JOIN abc a
       ON
         j.abc = z.abc AND z.xyz = a.xyz;

but <psql> complains about a syntax error "at or near" that last semi-
colon.  Anybody know what I'm doing wrong, or what I can do to get my
desired three-way join?  Or do I have to create that intermediate ta-
ble?  Any information you can give me would be appreciated.

                                ---Kevin

"You'll never get to heaven, or even to LA,
if you don't believe there's a way."
from _Why Not_


Re: How Do You Do a Three Way Join?

От
Richard Broersma Jr
Дата:
--- kvnsmnsn@cs.byu.edu wrote:

> I've got three tables, <jqz>, <zqj>, and <abc>.  I can do a
> <jqz j RIGHT JOIN zqj z> and a <zqj z LEFT JOIN abc a>, but is there a
> way to do a three-way join to get the columns of all three tables?

Take a look at "FULL OUTER JOIN".

http://www.postgresql.org/docs/8.2/interactive/queries-table-expressions.html#QUERIES-JOIN

Regards,
Richard Broersma Jr.



Re: How Do You Do a Three Way Join?

От
Stephan Szabo
Дата:
On Tue, 22 May 2007 kvnsmnsn@cs.byu.edu wrote:

> I've got three tables, <jqz>, <zqj>, and <abc>.  I can do a
> <jqz j RIGHT JOIN zqj z> and a <zqj z LEFT JOIN abc a>, but is there a
> way to do a three-way join to get the columns of all three tables?  Of
> course I could do one of those former two joins and then join the out-
> put table to the third table, but is there a way to do it without cre-
> ating the intermediate table?
>
> I tried:
>
>      SELECT
>          j.abc, j.def, z.xyz, a.ghi
>        FROM
>          jqz j RIGHT JOIN zqj z LEFT JOIN abc a
>        ON
>          j.abc = z.abc AND z.xyz = a.xyz;

I think you'd want something like
 (jqz j RIGHT JOIN zqj z ON j.abc=z.abc) LEFT JOIN abc a ON (z.xyz=a.xyz)