0

此查询返回 2 行

SELECT `users`. * , `user_bets` . *
FROM `users`
LEFT JOIN `user_bets` ON `user_bets`.`user_id` = `users`.`id` 

user_bets这个返回 1 行(其中一个用户在表中没有任何行。

SELECT users. * , count(user_bets.id) as bets
FROM `users`
LEFT JOIN `user_bets` ON `user_bets`.`user_id` = `users`.`id` 

但我坚持认为它会以任何方式归还他,因为它是左连接?0 作为他的赌注?如果没有,有没有办法让两行都为 0 作为第二行的赌注?还是应该在 2 个查询中打破它?

4

1 回答 1

2

COUNT()是计数非 NULL 值的聚合函数。

http://dev.mysql.com/doc/refman/5.1/en/counting-rows.html


由于您没有GROUP BY子句,因此使用聚合函数COUNT()可能不是您想要的。

您应该添加缺少的GROUP BY子句:

SELECT users. * , COUNT(user_bets.id) as bets
FROM `users`
LEFT JOIN `user_bets` ON `user_bets`.`user_id` = `users`.`id` 
GROUP BY `users`.`id`

或者也许使用IF(...)

SELECT users. * , IF(user_bets.id IS NOT NULL, 1, 0) as bets
FROM `users`
LEFT JOIN `user_bets` ON `user_bets`.`user_id` = `users`.`id` 

请参阅http://sqlfiddle.com/#!2/08a52/3进行实验。

于 2013-08-02T21:02:35.733 回答