【发布时间】:2019-04-25 09:35:13
【问题描述】:
许多问题都被问到同样的问题。但先听我说完。
我有两个使用LEFT JOIN 连接的表,第一个表是用户表,第二个表只是参考表划分表
用户表
user_id | name | division_id
0 | ABC | 0
1 | DEF | 1
2 | GHI | 1
分区表
id | name | protect class
1 | div_1 | 1
我的原始查询
SELECT count(usr.user_id)
FROM user as usr
LEFT JOIN division as dv
ON dv.id = usr.division_id
WHERE
dv.protect_class != '1'
但是当我想选择没有划分的用户时
SELECT count(usr.user_id)
FROM m_users as usr
LEFT JOIN m_division as dv
ON dv.id = usr.division_id OR usr.division_id = '0'
WHERE
dv.protect_class != '1'
事情有点奇怪,没有 division_id 或等于 0 的用户会根据获得的部门条目数被计算多次。
我也尝试添加不同的
SELECT distinct count(usr.user_id)
FROM m_users as usr
LEFT JOIN m_division as dv
ON dv.id = usr.division_id OR usr.division_id = '0'
WHERE
dv.protect_class != '1'
但我仍然没有运气。 当我查询这个
SELECT distinct usr.*
FROM m_users as usr
LEFT JOIN m_division as dv
ON dv.id = usr.division_id OR usr.division_id = '0'
WHERE
dv.protect_class != '1'
并以物理方式(手动)计数,计数是正确的,然后如果我应用 count() 函数,计数是错误的。所以我只是想请教一下,
如何在不计算我的LEFT JOIN 中的重复项的情况下计算条目?
【问题讨论】:
-
更新您的问题并添加适当的数据样本..
-
一个简单的样本数据就足够了吗?
-
是一个简单的数据集,用于检查您为多个查询获得的行为
-
我不明白你为什么使用这个
OR usr.division_id = '0' -
@A.Marwan 假设这是我正在做的事情所必需的
标签: mysql