以下是我的数据库结构。
用户
id|username|email |country|datenumber|
--|--------|----- |-------|----------|
1|user1 |example@example.com | GB |2017-11-08|
2|user2 |example@example.com | GB |2017-11-08|
3|user3 |example@example.com | GB |2017-11-08|
4|user4 |example@example.com | GB |2017-11-08|
5|user5 |example@example.com | GB |2017-11-08|
faillogs
id|userid |type |datenumber|
--|--------|------------|----------|
1|1 |wronganswer |2017-11-08|
2|3 |wronganswer |2017-11-08|
3|3 |wronganswer |2017-11-08|
4|3 |wronganswer |2017-11-08|
5|5 |wronganswer |2017-11-08|
6|5 |wronganswer |2017-11-08|
7|5 |wronganswer |2017-11-08|
8|5 |wronganswer |2017-11-08|
9|5 |wronganswer |2017-11-08|
cashouts
id|userid |amount |datenumber|
--|--------|------------|----------|
1|1 |1.47 |2017-11-08|
1|1 |2.97 |2017-11-08|
1|2 |1.05 |2017-11-08|
我的问题是,我如何获取已加入的所有用户,但也列出了faillogs的数量。
以下SQL提取所有用户
SELECT * FROM users
下面的SQL执行连接以获取faillogs。
SELECT *, COUNT(faillogs.userid) FROM users
INNER JOIN faillogs
ON users.id=faillogs.userid
GROUP BY faillogs.userid
ORDER BY users.datenumber ASC
我希望能够通过连接获取每个用户的faillog数量的好处,显示所有用户,而不仅仅是具有faillog的用户。我该怎么做?
我这里有一个SQL小提琴。 http://sqlfiddle.com/#!9/56cf4/4
答案 0 :(得分:1)
您必须使用LEFT JOIN
代替INNER JOIN
答案 1 :(得分:1)
使用LEFT JOIN
。也按users.id
而不是faillogs.userid
分组,因为其中一些可能/将是NULL
。
SELECT users.id,
users.username,
users.email,
users.country,
users.datenumber,
Count(faillogs.userid)
FROM users
LEFT JOIN faillogs
ON users.id = faillogs.userid
GROUP BY users.id,
users.username,
users.email,
users.country,
users.datenumber
ORDER BY users.datenumber ASC