繁体   English   中英

有条件的左联接

[英]LEFT JOIN with a condition

我需要加入两个表。 我只想显示其中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

我想做的是排除第一行ID100。(所以我想那实际上不是LEFT JOIN->如果满足条件,我希望它成为LEFT JOIN,否则排除)我该怎么做?

您需要两个单独的条件子句,一个在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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM