2013-04-15 68 views
0

我需要連接兩個表。我只想顯示其中users.private = 0加入條件

feeds 
id  user_id 
100 1 
101 NULL 
102 2 

users 
id private 
1 1 
2 0 

我看過很多相關的問題比賽,答案永遠是移動的WHERE條件爲ON來代替。但是,如果我這樣做:

SELECT `feeds`.`id`, `feeds`.`user_id` AS `feed_user_id`, `users`.`id` AS `user_id`, `users`.`private` 
FROM `feeds` 
    LEFT JOIN `users` ON `feeds`.`user_id` = `users`.`id` 
     AND `users`.`private` = 0 

這將返回

id  feed_user_id user_id private 
100 1    NULL  NULL 
101 NULL   NULL  NULL 
102 2    2  0 

我想要它做的100(所以我想這是不是一個真正的LEFT JOIN被排除在第一行的ID - >我如果條件滿足,則希望它爲LEFT JOIN,否則排除)我該怎麼做?

+0

您是否想要顯示'feeds.id'哪裏'feeds.user_id'也是'null'? (也就是說,你想顯示ID 101還是102?) – iamnotmaynard

+0

@iamnotmaynard是的,我願意。 – andrewtweber

回答

1

您需要兩個單獨的條件從句,一個在JOIN,一個在SELECT,像這樣:

SELECT `feeds`.`id`, `feeds`.`user_id` AS `feed_user_id`, `users`.`id` AS `user_id`, `users`.`private` 
FROM `feeds` 
LEFT JOIN `users` ON `feeds`.`user_id` = `users`.`id` 
WHERE `users`.`private` = 0 OR `feeds`.`user_id' IS NULL 

與您當前方法的問題是,加入就好像他們不」是處理私人用戶不存在,而不是說「這個人存在,我應該從結果中排除這一行」。

+0

感謝您的查詢和解釋。早些時候,我試着'users.private = 0或users.private IS NULL',但有些感覺不對。我更喜歡這個 – andrewtweber