我需要加入两张桌子。我只想显示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,否则排除)我该怎么办?此?
答案 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
您当前的方法存在的问题是,联接正在将私有用户视为不存在,而不是说“此人存在,我应该从结果中排除此行”。