Re: returning rows from an implicit JOIN where results either exist in both tables OR only one table

Поиск
Список
Период
Сортировка
От Lonni J Friedman
Тема Re: returning rows from an implicit JOIN where results either exist in both tables OR only one table
Дата
Msg-id CAP=oouGhC8dJaeAM3=4mJf5Xr1vWbLCH128QCUFuW7cCZ26U3w@mail.gmail.com
обсуждение исходный текст
Ответ на Re: returning rows from an implicit JOIN where results either exist in both tables OR only one table  ("David Johnston" <polobo@yahoo.com>)
Список pgsql-general
On Thu, Dec 1, 2011 at 1:57 PM, David Johnston <polobo@yahoo.com> wrote:
> -----Original Message-----
> From: pgsql-general-owner@postgresql.org [mailto:pgsql-general-owner@postgresql.org] On Behalf Of Lonni J Friedman
> Sent: Thursday, December 01, 2011 4:13 PM
> To: pgsql-general
> Subject: [GENERAL] returning rows from an implicit JOIN where results either exist in both tables OR only one table
>
>
> I'm stumbling over how to integrate those two tables with static data into the query.  The following query works fine
aslong as there's at least one row in the 'results' table that corresponds to each row in the pending table (however,
itdoesn't return anything for rows that only exist in 'pending' yet not yet in 'results'): 
>
> -----------------------------------------
>
> Implicit JOINs are ALWAYS INNER JOINs
>
> Since you want to use an OUTER JOIN you must be explicit.
>
> I'm not going to try and figure out specifically what you need but from your quick description (all pending and
resultswhere available) you need to do something like 
>
> "pending" LEFT OUTER JOIN "results" ON ("pending".active = "results".hostname AND "pending".submittracker =
"results".submittrackerAND "pending".cl = "results".cl) 
>
> Then, for conditions dependent upon the "results" (or NULL-able) relation, you need to make sure you explicitly allow
forthe missing rows: 
>
> ( "results".current_status IS NULL  OR ( your existing "results" conditions ) )
>
> http://www.postgresql.org/docs/9.0/interactive/queries-table-expressions.html#QUERIES-FROM

Thanks for your reply and input.  I ended up putting together the
following query which does what I need:

SELECT  pending.cl,
        pending.id,
        pending.buildid,
        pending.build_type,
        pending.active,
        pending.submittracker,
        pending.os,
        pending.arch,
        pending.osversion,
        pending.branch,
        pending.comment,
        osversmap.osname,
        buildlist.buildname,
        results.logurl
FROM pending
    JOIN osversmap
        ON ( pending.os = osversmap.os
            AND pending.osversion = osversmap.osversion )
    JOIN buildlist
        ON ( pending.buildid = buildlist.id )
    LEFT OUTER JOIN results
        ON ( pending.active = results.hostname
            AND pending.submittracker = results.submittracker
            AND pending.cl = results.cl
            AND results.current_status != 'PASSED'
            AND results.current_status NOT LIKE '%FAILED'
            )
WHERE pending.owner = '$owner'
    AND pending.completed = 'f'
ORDER BY pending.submittracker,
    pending.branch,
    pending.os,
    pending.arch

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

Предыдущее
От: Oleg Serov
Дата:
Сообщение: Re: Postgresql + corrupted disk = data loss. (Need help for database recover)
Следующее
От: Venkat Balaji
Дата:
Сообщение: Re: Postgresql + corrupted disk = data loss. (Need help for database recover)