2008-12-02 64 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