当我尝试加入时,我遇到了问题 以下是我的数据库。
rank (id, name)
-----------------
id | name
1 CEO
2 CTO
3 Employee
4 Manager
user (id, position)
-----------------
id | position
1 2
2 2
3 3
4 3
sql>
SELECT rank.id, rank.name, count(*)
FROM rank
LEFT JOIN user
ON rank.id = user.position
GROUP BY rank.name
在这种情况下,我有一个像
这样的答案id | name | count(*)
1 CEO 1
2 CTO 2
3 Employee 2
4 Manager 1
为什么CEO
,Manager
被计为'1'?
我认为它应该是'0'。
答案 0 :(得分:0)
只要表用户没有匹配,左外连接就会为您提供一个空记录,因此您得到的计数为1而不是0。
这是一个有效的选择声明:
SELECT id, name, (select count(*) from user where user.position = rank.id) as cnt
FROM rank;
编辑:顺便说一下,如果您计算了一个用户字段,那么您的语句也会起作用,因为不会计算NULL值。因此,您将使用COUNT(user.position)而不是COUNT(*)。但是,为了简单和可读性,我更喜欢我的陈述。
答案 1 :(得分:0)
左连接为您提供左表中的所有行,无论它们是否与正确的行匹配。因为你算数(*)它也计算空数。你可以改为计数(位置),这对我有用。