[英]left join doesn't return the rows without corrispandednt in the second table(right) when i use COUNT in the query
此查詢返回2行
SELECT `users`. * , `user_bets` . *
FROM `users`
LEFT JOIN `user_bets` ON `user_bets`.`user_id` = `users`.`id`
這一行返回1行(其中一個用戶在user_bets
表中沒有任何行。
SELECT users. * , count(user_bets.id) as bets
FROM `users`
LEFT JOIN `user_bets` ON `user_bets`.`user_id` = `users`.`id`
但我覺得自從它左轉加入后它會以任何方式回歸他? 0是他的賭注? 如果沒有,有沒有辦法讓兩個行都為0作為第二個與加入的賭注? 或者應該在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進行實驗。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.