2008-12-02 62 views
2

我遇到了用于显示自定义配置文件字段和任何(可选)相应值的SQL查询问题。MySQL左加入问题 - 缺少左列

这里是我使用的SQL查询:

SELECT pf.`id`, pf.`name`, pv.`value` FROM `profile_fields` AS pf 
LEFT JOIN `profile_values` AS pv ON (pf.`id` = pv.`field_id`) 
WHERE (pf.`site_id` = '0' OR pf.`site_id` = '%d') AND (pv.`user_id` = '%d' OR pv.`user_id` IS NULL) 
ORDER BY pf.`order` ASC 

我遇到的问题是,有没有相应的记录profile_values任何列不显示在所有的时候,他们应该表现出,但只是一个空值。

非常感谢!

回答

7

尝试移动配置文件值条件的JOIN声明:

SELECT pf.`id`, pf.`name`, pv.`value` FROM `profile_fields` AS pf 
LEFT JOIN `profile_values` AS pv ON (
     pf.`id` = pv.`field_id` AND 
     (pv.`user_id` = '%d' OR pv.`user_id` IS NULL) 
) 
WHERE (pf.`site_id` = '0' OR pf.`site_id` = '%d') 
ORDER BY pf.`order` ASC 
+0

非常感谢 - 这奏效了!从来不知道我能够在“ON”子句中添加这样的事情! – Nick 2008-12-02 12:36:16