Обсуждение: References NULL field

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

References NULL field

От
Paul M Foster
Дата:
This is PostgreSQL 7.4 (long story). I have a table, registrars, which
has, among other things,

note_id integer references notes

The notes table has, among other things,

note_id integer default nextval('notes_seq')

Right now, there's nothing in the notes table, and all the records in
the registrars table have null for their note_id field.

I want to do a query (in PHP, FWIW) that returns all the fields in
registrars, and the contents of any relevant notes records, or null for
those fields if there is no corresponding record in the notes table. But
when I do

SELECT * FROM registrars, notes WHERE regname = 'blah'

no matter that I put after the 'blah' (or nothing), I get no results. As
soon as I add notes into the tables being queried, I get nothing.

There's some special way I need to shape this query, but I don't know
what it is. Any help would be appreciated.

-- 
Paul M. Foster




Re: References NULL field

От
Michael Fuhr
Дата:
On Sun, Apr 02, 2006 at 11:43:34PM -0400, Paul M Foster wrote:
> I want to do a query (in PHP, FWIW) that returns all the fields in
> registrars, and the contents of any relevant notes records, or null for
> those fields if there is no corresponding record in the notes table. But
> when I do
> 
> SELECT * FROM registrars, notes WHERE regname = 'blah'
> 
> no matter that I put after the 'blah' (or nothing), I get no results. As
> soon as I add notes into the tables being queried, I get nothing.

The above query does a cross (cartesian) join of registrars and
notes.  Since notes is empty the join result is empty.  Try an
outer join:

SELECT *
FROM registrars LEFT OUTER JOIN notes USING (note_id)
WHERE regname = 'blah';

-- 
Michael Fuhr