我有三张这样的桌子:
漫画
| id | sendby
------------------
| 1 | 1
| 2 | 1
| 3 | 1
| 4 | 1查普雷尔
| id | sendby | translator | graphic
-------------------------------------------
| 1 | 1 | admin | other
| 2 | 1 | admin | other
| 3 | 1 | admin | admin
| 4 | 1 | other | admin用户
| userid | username
-----------------------
| 1 | admin 我试着数一下我发过的所有东西,但结果不正确。
我尝试过以下查询:
SELECT username,
SUM(
CASE WHEN m.sendby = u.userid
THEN 1 ELSE 0 END
) AS manga,
SUM(
CASE WHEN c.sendby = u.userid
THEN 1 ELSE 0 END
) AS chapter,
SUM(
CASE WHEN c.translator = u.username
THEN 1 ELSE 0 END
) AS translator,
SUM(
CASE WHEN c.graphic = u.username
THEN 1 ELSE 0 END
) AS graphic
FROM user u
left JOIN manga m
ON m.sendby = u.userid
left JOIN chapter c
ON c.sendby = u.userid
where u.userid = '1'但是返回this是不正确的:
漫画: 16,第:16章,翻译: 12,附图:8
发布于 2012-08-12 21:27:40
以下是对此的查询
select
m.id,
count(m.sendby) as Manga,
lc.Chapter,
rc.Translater,
c.Grafix
from manga as m
left join (select sendby, count(sendby) as Chapter from chaprer) as lc on lc.sendby = m.sendby
left join (select sendby, count(translater) as Translater from chaprer where translater = 'admin') as rc on rc.sendby = m.sendby
left join (select sendby, count(graphics) as Grafix from chaprer where translater = 'admin') as c on c.sendby = m.sendby编辑
我测试了这个查询,结果如下所示
Query Result
id Manga Chapter Translater Grafix
1 4 4 3 3 发布于 2012-08-12 21:23:10
你是故意使用left JOIN的吗?你知道它是怎么works的吗?使用它两次使您的select在16行结果表上运行。首先尝试选择所有结果(*),然后修复FROM子句以返回要从中选择的所需数据。
从您的评论来看,您似乎打算使用Inner join。
发布于 2012-08-12 22:40:18
一种直接的方法是这样做:
SELECT username,
(SELECT COUNT(m.sendby) FROM manga m WHERE m.sendby= u.userid) AS manga,
(SELECT COUNT(c.sendby) FROM chapter c WHERE c.sendby= u.userid) AS chapter,
(SELECT COUNT(t.sendby) FROM chapter t WHERE t.translator= u.username) AS translator,
(SELECT COUNT(g.sendby) FROM chapter g WHERE g.graphic= u.username) AS graphic
FROM USER u
WHERE userid=1如果运行以下命令,您将在原始查询中看到问题:
SELECT *
FROM USER u
LEFT JOIN manga m
ON m.sendby = u.userid
LEFT JOIN chapter c
ON c.sendby = u.userid
WHERE u.userid = '1'左联接返回重复的行。
https://stackoverflow.com/questions/11922440
复制相似问题