SQL查询,计数为0
时间:2020-03-05 18:45:38 来源:igfitidea点击:
我有三个表:页面,附件,页面附件
我有这样的数据:
page ID NAME 1 first page 2 second page 3 third page 4 fourth page attachment ID NAME 1 foo.word 2 test.xsl 3 mm.ppt page-attachment ID PAGE-ID ATTACHMENT-ID 1 2 1 2 2 2 3 3 3
当该数字为0时,我也希望获得每页的附件数。
select page.name, count(page-attachment.id) as attachmentsnumber from page inner join page-attachment on page.id=page-id group by page.id
我得到以下输出:
NAME ATTACHMENTSNUMBER second page 2 third page 1
我想得到以下输出:
NAME ATTACHMENTSNUMBER first page 0 second page 2 third page 1 fourth page 0
如何获得0部分?
解决方案
回答
将"内部联接"更改为"左侧外部联接",这意味着"即使在右侧没有匹配的行,也请让我在联接的左侧获得所有行"。
select page.name, count(page-attachment.id) as attachmentsnumber from page left outer join page-attachment on page.id=page-id group by page.name
回答
我们需要左联接,而不是内部联接,因为这允许记录不存在。
回答
左加入是朋友。
要了解有关不同联接类型的更多信息,请参阅http://en.wikipedia.org/wiki/Join_(SQL)
回答
这是使用子查询的另一种解决方案。
SELECT p.name, ( SELECT COUNT(*) FROM [page-attachment] pa WHERE pa.[PAGE-ID] = p.id ) as attachmentsnumber FROM page p