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

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

4

1 回答 1

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

您当前方法的问题在于,加入将私人用户视为不存在,而不是说“这个人存在,我应该从结果中排除这一行”。

于 2013-04-15T16:53:39.503 回答