给定使用 PostgreSQL 8.4.13 的 Drupal 7.17 数据库中的用户名,我试图获取分布在多个表中的用户信息(uid、城市、性别、头像)。
然而,头像(下f.filename
图)是可选的 - 有些用户没有它。
对于确实有头像的用户,我的查询效果很好:
# 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)
但是对于没有头像的用户,我得到空结果。
当我省略drupal_file_managed f
表格时 - 它再次起作用:
# 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)
如何修改我的 join 语句以确保它始终为有效用户返回 1 行 - 无论他们是否有头像?对于后一种情况,该f.filename
列可以为空。
我想要一个左外连接吗?(恐怕它会返回几行而不是 1 行)。