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,它仍将只计数一次。