Re: Trouble with an outer join - Mailing list pgsql-novice
| From | |
|---|---|
| Subject | Re: Trouble with an outer join |
| Date | |
| Msg-id | 005801c5c232$273bf000$1600a8c0@iwing Whole thread Raw |
| In response to | Trouble with an outer join (Martin Foster <martin@ethereal-realms.org>) |
| Responses |
Re: Trouble with an outer join
|
| List | pgsql-novice |
this should work just fine:
SELECT
t.TagName AS "TagName",
t.TagType AS "TagType",
d.RealmName AS "RealmName"
FROM ethereal.Tag t
LEFT OUTER JOIN ethereal.RealmDesign d
ON (t.TagName=d.TagName)
WHERE t.TagType='template'
AND (t.TagName LIKE 'Realm%'
OR t.TagName LIKE 'Offline%')
AND (d.RealmName='Horror' or d.RealmName IS NULL)
ORDER BY t.TagName;
cheers,
thomas
----- Original Message -----
From: "Martin Foster" <martin@ethereal-realms.org>
To: "Stephan Szabo" <sszabo@megazone.bigpanda.com>
Cc: "PostgreSQL Novice List" <pgsql-novice@postgresql.org>
Sent: Monday, September 26, 2005 2:30 AM
Subject: Re: [NOVICE] Trouble with an outer join
> Stephan Szabo wrote:
>
>>> From the output its pretty clear that the first 10 should have been
>>>omitted for more then one reason. However they appear every time and
>>>in order to compensate for this, I have the script skip through unneeded
>>>entries manually.
>>>
>>>So what exactly am I doing wrong?
>>
>>
>> AFAIK, conditions like t.TagType='template' in the ON condition of an
>> outer join are not going to constrain the rows from t that are created
>> but
>> instead constrain whether or not a row from d in considered as valid (ie,
>> you're saying to extend with NULLs for TagTypes other than 'template').
>>
>> I think some of those conditions you want in a WHERE clause, possibly all
>> the ones that refer only to t.
>>
>
> SELECT
> t.TagName AS "TagName",
> t.TagType AS "TagType",
> d.RealmName AS "RealmName"
> FROM ethereal.Tag t
> LEFT OUTER JOIN ethereal.RealmDesign d
> ON (t.TagName=d.TagName)
> WHERE t.TagType='template'
> AND (t.TagName LIKE 'Realm%'
> OR t.TagName LIKE 'Offline%')
> AND d.RealmName='Horror'
> ORDER BY t.TagName;
>
> Let's try that change which oddly enough does not do an outer join at all.
> Here is the sample output:
>
> TagName | TagType | RealmName
> ----------------------+----------+-----------
> RealmDice | template | Horror
> RealmFrameAutoscroll | template | Horror
> RealmFrameNormal | template | Horror
> RealmHeader | template | Horror
> RealmNotice | template | Horror
> RealmPanel | template | Horror
> RealmPrivate | template | Horror
> RealmRemote | template | Horror
> RealmSeperator | template | Horror
> RealmWarning | template | Horror
> RealmZoom | template | Horror
>
> Now let's try a variation:
>
> SELECT
> t.TagName AS "TagName",
> t.TagType AS "TagType",
> d.RealmName AS "RealmName"
> FROM ethereal.Tag t
> LEFT OUTER JOIN ethereal.RealmDesign d
> ON (t.TagName=d.TagName AND d.RealmName='Horror')
> WHERE t.TagType='template'
> AND (t.TagName LIKE 'Realm%'
> OR t.TagName LIKE 'Offline%')
> ORDER BY t.TagName;
>
> Which allows us to get what we need. Which gets rather confusing as to
> how to get a join to work exactly like people expect it too.
>
> TagName | TagType | RealmName
> ----------------------+----------+-----------
> OfflineInfo | template |
> OfflinePage | template |
> OfflinePanel | template |
> OfflineWarning | template |
> RealmBanner | template |
> RealmDice | template | Horror
> RealmFooter | template |
> RealmFrameAutoscroll | template | Horror
> RealmFrameNormal | template | Horror
> RealmHeader | template | Horror
> RealmInfo | template |
> RealmJavascript | template |
> RealmNotice | template | Horror
> RealmPanel | template | Horror
> RealmPrivate | template | Horror
> RealmRefresh | template |
> RealmRemote | template | Horror
> RealmSeperator | template | Horror
> RealmSupp | template |
> RealmWarning | template | Horror
> RealmZoom | template | Horror
> (21 rows)
>
> Anyone know good documentation on how to determine exactly where to cram
> thing as necesssary?
>
> Martin Foster
> Creator/Designer Ethereal Realms
> martin@ethereal-realms.org
>
> ---------------------------(end of broadcast)---------------------------
> TIP 4: Have you searched our list archives?
>
> http://archives.postgresql.org
>
pgsql-novice by date: