【发布时间】:2010-11-19 04:06:07
【问题描述】:
我正在尝试使用以下代码获取 4 个特定部分中的文档数:
SELECT
category.id
, category.title
, count(ts1.section_id) AS doc1
, count(ts2.section_id) AS doc2
, count(ts3.section_id) AS doc3
, count(ts4.section_id) AS doc4
FROM
category
LEFT JOIN category_link_section AS ts1
ON (category.id = ts1.category_id AND ts1.section_id = 1)
LEFT JOIN category_link_section AS ts2
ON (category.id = ts2.category_id AND ts2.section_id = 2)
LEFT JOIN category_link_section AS ts3
ON (category.id = ts3.category_id AND ts3.section_id = 3)
LEFT JOIN category_link_section AS ts4
ON (category.id = ts4.category_id AND ts4.section_id = 4)
GROUP BY category.id, ts1.section_id, ts2.section_id, ts3.section_id, ts4.section_id
表“类别”有一个 ID、标题等。 表 'category_link_section' 包含 category_id、section_id 和 doc_id 之间的 id 链接。
如果任何列的计数为 0,则在该列中显示 0。但如果结果不为 0,则显示所有部分结果的乘法结果。因此,如果我的 4 个计数列应该返回:1、2、0、3;它实际上会显示 6、6、0、6;
如果我对每个特定类别使用以下代码,我会得到我想要的结果:
SELECT
category.id
, category.title
, count(ts1.section_id) AS doc1
FROM
category
LEFT JOIN category_link_section AS ts1
ON (category.id = ts1.category_id AND ts1.section_id = 1)
GROUP BY category.id, ts1.section_id
但是我需要为每个部分每次循环浏览数据库。
所以我的问题是,我是否需要逐步执行并依次调用每个部分,在 SQL 之外构建我的表,还是可以在单个查询中完成?
【问题讨论】: