我有三个表,我想从一个表中选择所有数据,并且还要收集特定数据行链接次数的COUNT另外两张桌子。SQL在两个表中的多个COUNT(),在一个LEFT JOIN中
因此,从site_projects中选择所有数据。然后返回一个COUNT的site_project_members WHERE site_projects
。 id
= site_project_members
。 pid
,并返回COUNT个site_project_tasks,其中site_projects
。 id
= site_project_members
。 pid
我希望我是有道理的,对于查询,它看起来是正确的。并且它没有问题地查询数据库(MySQL)。 除以外,它返回两个计数的总和。 (请参阅下表结构)
site_projects
id | title | desc | start | deadline | progress
1 | Project 1 | a project | 1321748906 | 1329847200 | 20
site_project_members
id | pid | uid | img | hidden
1 | 1 | 1 | 1 | 0
2 | 1 | 2 | 2 | 0
site_project_tasks
id | pid | desc | completed
1 | 1 | Task 1 | 1
1 | 1 | Task 2 | 0
这里是我的查询:
SELECT p.`id`, p.`title`, p.`desc`, p.`progress`, p.`start`, p.`deadline`, COUNT(m.`id`) as `members`, COUNT(t.`id`) as `tasks` FROM `site_projects` p LEFT JOIN `site_project_members` m ON p.`id`=m.`pid` LEFT OUTER JOIN `site_project_tasks` t ON p.`id`=t.`pid` ORDER BY p.`id` ASC
结果我得到的是:
id | title | desc | progress | start | deadline | members | tasks
1 | Project 1 | a project | 20 | 1321748906 | 1329847200 | 4 | 4
无论是“4”的值应该为2。然而,它们不是:能小号任何帮助? 大加赞赏
感谢, 丹
这是因为您在汇总错误!与其他RDBMS不同,MySQL不会阻止你像这样运行聚合。基本上你会得到随机值,因为你没有指定一个“GROUP BY”。 – JNK 2012-01-31 18:52:16