Mysql 使用带计数(*)的右外部联接
我对连接查询有问题。 我有三张桌子: 机器Mysql 使用带计数(*)的右外部联接,mysql,Mysql,我对连接查询有问题。 我有三张桌子: 机器 +-----+--------+ | mid | points | +-----+--------+ | 12 | 25 | | 22 | 50 | | 23 | 75 | | 30 | 90 | +-----+--------+ 挑战 +----+-----+-----+ | id | mid | uid | +----+-----+-----+ | 1 | 22 | 9 | | 2 | 23 |
+-----+--------+
| mid | points |
+-----+--------+
| 12 | 25 |
| 22 | 50 |
| 23 | 75 |
| 30 | 90 |
+-----+--------+
挑战
+----+-----+-----+
| id | mid | uid |
+----+-----+-----+
| 1 | 22 | 9 |
| 2 | 23 | 10 |
| 3 | 29 | 13 |
| 4 | 12 | 10 |
+----+-----+-----+
用户提示
+----+-----+-----+
| id | mid | uid |
+----+-----+-----+
| 1 | 22 | 10 |
| 2 | 23 | 10 |
| 3 | 30 | 10 |
| 4 | 22 | 11 |
+----+-----+-----+
我正在尝试创建一个查询,它将收集特定用户的一些统计信息到一行中
+--------+------------+
| points | totalhints |
+--------+------------+
| 100 | 3 |
+--------+------------+
这是我的疑问:
SELECT challenges.id,
IFNULL(
( SELECT SUM(m.points) as points
FROM challenges c
INNER JOIN machines m ON (c.mid = m.mid AND c.uid = 10)
GROUP BY c.uid),'0') AS points,
COUNT(*) as totalhints
FROM challenges
RIGHT OUTER JOIN user_hints uh ON user_hints.uid = 10
GROUP BY points
但TotalHits已关闭,正在计算所有行。
我能得到一些关于最后一个内部连接部分的帮助吗?
谢谢您可以执行以下操作,但实际上,当您将不同类型的内容混合在一起时,我认为最好在单独的查询中执行此操作
SELECT DISTINCT j.uid
, COALESCE(k.points,0) points
, COALESCE(l.hints,0) hints
FROM challenges j
LEFT
JOIN (SELECT c.uid, SUM(points) points FROM challenges c JOIN machines m ON m.mid = c.mid GROUP BY c.uid) k
ON k.uid = j.uid
LEFT
JOIN (SELECT uid, COUNT(h.id) hints FROM user_hints h GROUP BY uid) l
ON l.uid = j.uid;
谢谢你,所以它并不总是最好的选择,以清除它与一个单一的查询毕竟。。。