Thread: Linking against null-fields.

Linking against null-fields.

From
Alexander Deruwe
Date:
Hey all,

I'm sorry if this question came up before, I couldn't find it in the 
archives..

Suppose I have two tables:

table File: contains alot of fields + 'driver' field, which refers to another 
table. I did not 'reference' it when creating the database because 
null-values have to be possible for this field.

Now, if in this File-table the field 'driver' is not filled in, the row will 
not be included in a query such as this one:

SELECT f.ID, d.NAME FROM FILE f, DRIVER d WHERE (d.ID = f.DRIVER);

However, the only reason I have this query set up as this is to get the name 
of the driver easily, if one is set.

How can this be helped? Should I just get the driver ID as a field, and then 
do a second query on that?

Thanks,

Alexander Deruwe


Re: Linking against null-fields.

From
david@netventures.com.au
Date:
Hi Alex,
For this you need an outer join (Made easy as of postgresql 7.1)

Alexander Deruwe Wrote:
> Hey all,
> 
> I'm sorry if this question came up before, I couldn't find it in the
> archives..
> 
> Suppose I have two tables:
> 
> table File: contains alot of fields + 'driver' field, which refers to
> another
> table. I did not 'reference' it when creating the database because
> null-values have to be possible for this field.
> 
> Now, if in this File-table the field 'driver' is not filled in, the row
> will
> not be included in a query such as this one:
> 
> SELECT f.ID, d.NAME FROM FILE f, DRIVER d WHERE (d.ID = f.DRIVER);

In Postgresql 7.1 You would do this as:

SELECT f.ID, d.NAME
FROM FILE f
LEFT OUTER JOIN DRIVER d ON d.ID = f.DRIVER

This join will fill in the missing rows from DRIVER  with NULL values.

Eg:
FILE:
ID    DRIVER
1    NULL
2    1
3    4

DRIVER:
ID    NAME
1    broken.dll
2    foo.zip


SELECT f.ID, d.NAME
FROM FILE f
LEFT OUTER JOIN DRIVER d ON d.ID = f.DRIVER;
ID    NAME
1    NULL
2    broken.dll
3    NULL

--
David Stanaway



Re: Linking against null-fields.

From
"Stephan Szabo"
Date:
> SELECT f.ID, d.NAME FROM FILE f, DRIVER d WHERE (d.ID = f.DRIVER);
>
> However, the only reason I have this query set up as this is to get the
name
> of the driver easily, if one is set.
>
> How can this be helped? Should I just get the driver ID as a field, and
then
> do a second query on that?

I think this might work:
select f.ID, d.NAME from FILE f LEFT OUTER JOIN  DRIVER d ON(d.ID=f.DRIVER);



_________________________________________________________
Do You Yahoo!?
Get your free @yahoo.com address at http://mail.yahoo.com