我正在处理一个查询,我需要在其中添加一个任务名称的列,其中包含存在于一对多关系中的许多数量
这是我的查询
SELECT
e.full_name AS fullName,
t.issue AS issue,
CASE t.state
WHEN 'open' THEN 'open'
WHEN 'pending' THEN 'In progress'
WHEN 'closed' THEN 'closed'
END AS status,
CASE t.scheduled
WHEN TRUE THEN 'scheduled'
WHEN FALSE THEN 'non-scheduled'
END AS scheduled,
d.name AS device,
DATE(t.date_created) AS dateCreated,
DATE(t.last_updated) AS lastUpdate
FROM
tickets t
INNER JOIN
employees e ON t.employee_id = e.id
INNER JOIN
devices d ON d.id = t.device_id
WHERE
MONTHNAME(t.date_created) = 'August'
ORDER BY dateCreated DESC
这是我工作的方案http://sqlfiddle.com/#!9/39bf3e/1
我尝试添加counts 和group by 但此时我在猜测
我期待这样的结果
感谢您的帮助
最佳答案
像这样使用派生表:
SELECT ...
TotalTasks --Add the count column to your select
FROM ticket t
JOIN (SELECT ticked_id, COUNT(1) as TotalTasks
FROM tasks
GROUP BY ticked_id) ta ON t.id = ta.ticked_id
...rest of query
这是您的 fiddle整个查询
这里的概念是在连接回一个 表之前,先对多个 表进行聚合。这可确保 1-1 联接并最好地防止不必要的重复。
关于mysql - 计算一对多关系中存在多少,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45948549/