MySQL具有多个计数的左连接

MySQL具有多个计数的左连接,mysql,select,Mysql,Select,我有这三张桌子 users [ id , username, password ] logs [ id, user_id, action ] user_propeties [ id, user_id, prop_name, prop_value ] 我想根据用户id,从2个表中选择包含Count(logs.id)和Count(user_properties.id)的所有用户列,其中prop_值为NULL 我有以下疑问 SELECT t1.*, count(t2.`id`) as total_l

我有这三张桌子

users [ id , username, password ]
logs [ id, user_id, action ]
user_propeties [ id, user_id, prop_name, prop_value ]
我想根据用户id,从2个表中选择包含Count(logs.id)和Count(user_properties.id)的所有用户列,其中prop_值为NULL

我有以下疑问

SELECT t1.*, count(t2.`id`) as total_logs,count(t3.`id`) as total_propeties
                       FROM `users` t1
                       LEFT JOIN `user_propeties` t2
                                ON t1.`id` = t2.`user_id` AND ISNULL(t2.`prop_value`)
                       LEFT JOIN `logs` t3
                                ON t3.`user_id` = t1.`id`                                       
                       GROUP BY t1.id
                       ORDER BY t1.id DESC

它返回行,但具有错误的计数值。我做错了什么?谢谢你

我想你需要一些不同的,否则它将返回所有日志和属性组合的计数

SELECT t1.*, COUNT(DISTINCT t2.`id`) as total_logs,
             COUNT(DISTINCT t3.`id`) as total_propeties
FROM `users` t1
LEFT JOIN `user_propeties` t2
         ON t1.`id` = t2.`user_id` AND ISNULL(t2.`prop_value`)
LEFT JOIN `logs` t3
         ON t3.`user_id` = t1.`id`                                       
GROUP BY t1.id
ORDER BY t1.id DESC

它起作用了,但我不明白为什么。你能解释一下吗?如果你有多个属性和多个日志,每个id可能会返回不止一次,因此常规的
计数将计数所有重复项
COUNT DISTINCT
将只对每个id计数一次,因此如果返回两次log#4,它仍将只计数一次。