Re: [gnome-db] GdaSqlBuiler: JOIN AS

Murray Cumming <[email protected]>
Newsgroups gmane.comp.gnome.db
Message-ID <1274100828.3092.322.camel@murrayc-desktop>
On Mon, 2010-05-17 at 14:43 +0200, Vivien Malerba wrote:
> On 17 May 2010 14:39, Murray Cumming <[email protected]> wrote:
> > On Mon, 2010-05-17 at 14:20 +0200, Vivien Malerba wrote:
> >> On 17 May 2010 10:07, Murray Cumming <[email protected]> wrote:
> >> > In Glom, I use the AS keyword with JOINS, to allow multiple joins with
> >> > the same table. A simple case looks like this, though it's unnecessary
> >> > in this particular example:
> >> >
> >> > SELECT "albums"."album_id", "albums"."name", "albums"."artist_id",
> >> > "relationship_artist"."name",
> >> > FROM "albums"
> >> > LEFT JOIN "artists"
> >> >  AS "relationship_artist"
> >> >  ON ("albums"."artist_id" = "relationship_artist"."artist_id")
> >> > WHERE "albums"."album_id" = 123
> >> >
> >> > (That might be an "alias", but I don't know if that's the right
> >> > terminology.)
> >> >
> >> > But I don't see how to do that with
> >> > gda_sql_builder_select_join_targets()
> >> > http://library.gnome.org/devel/libgda/unstable/GdaSqlBuilder.html#gda-sql-builder-select-join-targets
> >> >
> >>
> >> To do this you need to specify an alias when using the
> >> gda_sql_builder_select_add_target*() methods.
> >
> > But that's for adding table targts, right? How would it know which join
> > the alias name is for?
> >
> 
> The alias is for a target (table or sub select), not for a join: you
> don't need to name joins as they are never referenced anywhere else in
> the SQL statement, you can name targets if necessary.

In my example, the join name is mentioned in the list of fields. For
instance, relationship_artist.name.

Here's a silly example that shows the need for the name, because using
the table name would be ambiguous:

SELECT "albums"."album_id", "albums"."name",
"albums"."artist_singer_id", "relationship_artist_singer"."name",
"albums"."artist_drummer_id", "relationship_artist_drummer"."name",
  FROM "albums"
  LEFT JOIN "artists"
    AS "relationship_artist_singer"
    ON ("albums"."artist_singer_id" =
"relationship_artist_singer"."artist_id")
  LEFT JOIN "artists"
    AS "relationship_artist_drummer"
    ON ("albums"."artist_drummer_id" =
"relationship_artist_drummer"."artist_id")
WHERE "albums"."album_id" = 123




-- 
[email protected]
www.murrayc.com
www.openismus.com
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.