Join several tables (to fetch user info), but one of them is optional (user avatar)

From: Alexander Farber <alexander(dot)farber(at)gmail(dot)com>
To: pgsql-general <pgsql-general(at)postgresql(dot)org>
Subject: Join several tables (to fetch user info), but one of them is optional (user avatar)
Date: 2012-12-19 13:08:06
Message-ID: CAADeyWg26i6gmynZejRvEKL7rsBLpZm5ncPfkTrHk+_pSHa1kw@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

Hello,

given a user name in a Drupal 7.17 database
using PostgreSQL 8.4.13 I am trying to fetch user info
(uid, city, gender, avatar) distributed over several tables.

The avatar is however optional - some users don't have it.

For users, that do have avatars my query works well:

# select
u.uid,
/* u.pass, */
f.filename,
g.field_gender_value,
c.field_city_value
from
drupal_users u,
drupal_file_managed f,
drupal_field_data_field_gender g,
drupal_field_data_field_city c
where
u.name='Alex' and
u.picture=f.fid and
g.entity_id=u.uid and
c.entity_id=u.uid
;
uid | filename | field_gender_value | field_city_value
-----+--------------------------+--------------------+------------------
1 | picture-1-1312223092.jpg | Male | Bochum
(1 row)

However for users, who don't have avatar I get empty result.

When I omit the drupal_file_managed table - it works again:

# select
u.uid,
/* u.pass, */

g.field_gender_value,
c.field_city_value
from
drupal_users u,

drupal_field_data_field_gender g,
drupal_field_data_field_city c
where
u.name='mvp' and

g.entity_id=u.uid and
c.entity_id=u.uid
;
uid | field_gender_value | field_city_value
-------+--------------------+------------------
18539 | Male | Moscow
(1 row)

How could I modify my join statement to
ensure that it always returns 1 row for valid users -
regardless if they have avatar or not?

Do I want a "left outer join" here?
(I'm afraid it will return several rows instead of 1).

Regards
Alex

Responses

Browse pgsql-general by date

  From Date Subject
Next Message James Cowell 2012-12-19 13:11:42 Re: Corrupt indexes on slave when using pg_bulkload on master
Previous Message Groshev Andrey 2012-12-19 09:51:08 Re: [GENERAL] trouble with pg_upgrade 9.0 -> 9.1