gpt4 book ai didi

来自两个表的 SQL Multiple COUNT(),在一个 LEFT JOIN 中

转载 作者:行者123 更新时间:2023-12-04 02:41:10 25 4
gpt4 key购买 nike

我有三个表,我想从其中一个表中选择所有数据,并收集该特定数据行在其他两个表中链接的次数的 COUNT。

因此,从 site_projects 中选择所有数据。然后返回 COUNT 个 site_project_members WHERE site_projects . id = site_project_members . pid并返回 COUNT 个 site_project_tasks WHERE 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。但是它们不是 :S 任何人都可以提供帮助?
非常感激

谢谢,

最佳答案

SELECT p.id , p.title , p.desc , p.progress , p.start , p.deadline , 
COALESCE( m.cnt, 0 ) AS members,
COALESCE( t.cnt, 0 ) AS tasks
FROM site_projects p
LEFT JOIN
( SELECT pid, COUNT(*) AS cnt FROM
site_project_members
GROUP BY pid ) m
ON p.id = m.pid
LEFT JOIN
( SELECT pid, COUNT(*) AS cnt FROM
site_project_tasks
GROUP BY pid ) t
ON p.id = t.pid
ORDER BY p.id ASC

关于来自两个表的 SQL Multiple COUNT(),在一个 LEFT JOIN 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9085118/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com