LEFT JOIN条件

时间:2013-04-15 16:43:41

标签: mysql join left-join

我需要加入两张桌子。我只想显示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

我想要它做的是排除第一行ID 100.(所以我猜这不是真正的LEFT JOIN - >如果满足条件我想要LEFT JOIN,否则排除)我该怎么办?此?

1 个答案:

答案 0 :(得分: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

您当前的方法存在的问题是,联接正在将私有用户视为不存在,而不是说“此人存在,我应该从结果中排除此行”。