Обсуждение: Inner Join question

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

Inner Join question

От
"Keith Turner"
Дата:
Hi,

I have three tables

1) A list of devices
2) List of rooms
3) A bridge table that relates the two using each table's ID column

Any device can be in 0 to All rooms

I want to create a view that joins both tables that in includes all
columns from all 3 tables.

I'm not sure how to link joins in the Postgres SQL syntax. I'm more used
to the =* one.

I want to do something like

SELECT (explicit list of all tables columns - didn't like * but was ok
with actual list)
FROM
devices,rooms,bridge
WHERE
bridgeroomid = rooms.id
AND
bridgedeviceid=*devices.id

so that devices with no associated rooms would have null values for
those columns but be listed.

Any advice appreciated.

KDT

Re: Inner Join question

От
"Michael Swierczek"
Дата:
Keith,
    The * was a problem because the query analyzer did not know which
table to grab all columns from.   If you want all columns from more
than one table, you have to do alias.* for each one.   In this case,
you want:
select devices.*, rooms.*, bridge.* from ....

If you want devices to always be listed, even with no bridge entries,
you would do a left join to guarantee all rows from the first table
are included.

I think this is what you want:
SELECT devices.*, rooms.*, bridge.*
FROM devices
LEFT JOIN bridge on bridge.deviceid=devices.id
LEFT JOIN room on bridge.roomid = rooms.id;

-Mike


On Fri, Nov 7, 2008 at 3:45 PM, Keith Turner <kturner@cloudsystems.com> wrote:
> Hi,
>
> I have three tables
>
> 1) A list of devices
> 2) List of rooms
> 3) A bridge table that relates the two using each table's ID column
>
> Any device can be in 0 to All rooms
>
> I want to create a view that joins both tables that in includes all
> columns from all 3 tables.
>
> I'm not sure how to link joins in the Postgres SQL syntax. I'm more used
> to the =* one.
>
> I want to do something like
>
> SELECT (explicit list of all tables columns - didn't like * but was ok
> with actual list)
> FROM
> devices,rooms,bridge
> WHERE
> bridgeroomid = rooms.id
> AND
> bridgedeviceid=*devices.id
>
> so that devices with no associated rooms would have null values for
> those columns but be listed.
>
> Any advice appreciated.
>
> KDT
>
> --
> Sent via pgsql-novice mailing list (pgsql-novice@postgresql.org)
> To make changes to your subscription:
> http://www.postgresql.org/mailpref/pgsql-novice
>