[英]SQL get all columns from a table along with the count of a grouped column from another table related by a foreign key
我有2个表“ projects_logs”和“ logs_attachments”。 “ logs_attachments”表通过外键“ project_log_id”与“ projects_logs”相关。 每个project_id与多个“ project_log_id”相关,每个“ project_log_id”与多个“ log_attachment_id”相关。 我想获取一个项目的所有日志的记录,每个日志都没有附件的数量。
projects_logs
+----------------+------------+---------+-----------------------------------------------+---------------------+---------------------+
| project_log_id | project_id | event | notes | created_at | updated_at |
+----------------+------------+---------+-----------------------------------------------+---------------------+---------------------+
| 5 | 3 | started | Aut et dolores voluptatem id culpa inventore. | 2018-10-05 07:10:46 | 2018-10-05 07:10:46 |
| 6 | 3 | on-hold | dolores voluptatem id culpa | 2018-10-05 07:10:46 | 2018-10-05 07:10:46 |
| 241 | 3 | resumed | Isdnu sdlw o dolores voluptatem id | 2018-10-05 07:10:46 | 2018-10-05 07:10:46 |
+----------------+------------+---------+-----------------------------------------------+---------------------+---------------------+
logs_attachments
+-------------------+----------------+---------------------------+-----------+-----------+------------+---------------------+---------------------+
| log_attachment_id | project_log_id | file_name | file_type | attachment | file_size | created_at | updated_at |
+-------------------+----------------+---------------------------+-----------+-----------+------------+---------------------+---------------------+
| 24 | 5 | hic | rtf | 5_biY | 1212 | 2018-10-05 07:10:47 | 2018-10-05 07:10:47 |
| 23 | 5 | omnis | xls | 5_3QC | 5594 | 2018-10-05 07:10:47 | 2018-10-05 07:10:47 |
| 26 | 6 | quo | xlsx | 6_kfS | 2765 | 2018-10-05 07:10:47 | 2018-10-05 07:10:47 |
| 27 | 6 | consequuntur | txt | 6_BGd | 94 | 2018-10-05 07:10:47 | 2018-10-05 07:10:47 |
| 1201 | 241 | SampleJPGImage_50kbmb.jpg | jpeg | 241_xYP | 51085 | 2018-10-09 12:34:19 | 2018-10-09 12:34:19 |
+-------------------+----------------+---------------------------+-----------+-----------+------------+---------------------+---------------------+
我想要的是
+----------------+------------+---------+-----------------------------------------------+---------------------+---------------------+----------------------------------------+
| project_log_id | project_id | events | notes | created_at | updated_at | count(logs_attachments.project_log_id) |
+----------------+------------+---------+-----------------------------------------------+---------------------+---------------------+----------------------------------------+
| 5 | 3 | started | Aut et dolores voluptatem id culpa inventore. | 2018-10-05 07:10:46 | 2018-10-05 07:10:46 | 2 |
| 6 | 3 | on-hold | dolores voluptatem id culpa | 2018-10-05 07:10:46 | 2018-10-05 07:10:46 | 2 |
| 241 | 3 | resumed | Isdnu sdlw o dolores voluptatem id | 2018-10-05 07:10:46 | 2018-10-05 07:10:46 | 1 |
+----------------+------------+---------+-----------------------------------------------+---------------------+---------------------+----------------------------------------+
一个简单的联接应该在这里工作:
SELECT
p.project_log_id,
p.project_id,
p.event,
p.notes,
p.created_at,
p.updated_at
COALESCE(a.count, 0) AS count
FROM projects_logs p
LEFT JOIN
(
SELECT project_log_id, COUNT(*) AS count
FROM logs_attachments a
GROUP BY project_log_id
) a
ON p.project_log_id = a.project_log_id;
在子查询中使用join和count()
select t1.*,
COALESCE(t2.cnt, 0) as count_logs_attachments.project_log_id
from
projects_logs as t1
left join
(
select project_log_id,count(*) as cnt from logs_attachments
group by project_log_id
) t2 on
t1.project_log_id=t2.project_log_id
如果没有logs_attachments,则COALESCE
函数将帮助您获得0
你可以像这样写sql查询
select pl.project_log_id, pl.project_id, pl.event, pl.notes, pl.created_at, pl.updated_at, pla.attachment_count
from projects_logs as pl
inner join
(select count(log_attachment_id) as attachment_count, project_log_id
from logs_attachments group by project_log_id) as pla
on pla.project_log_id = pl.project_log_id
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.