C# 显示类别是否有线程
我正在尝试进行一个SQL查询,它显示类别以及类别中有多少线程的计数 这就是我得到的:C# 显示类别是否有线程,c#,sql,select,join,C#,Sql,Select,Join,我正在尝试进行一个SQL查询,它显示类别以及类别中有多少线程的计数 这就是我得到的: SELECT categories.category_name, categories.category_id, COUNT(*) AS 'threadCount' FROM threads RIGHT OUTER JOIN categories ON categories.category_id = threads.thread_category_id GROUP BY categori
SELECT categories.category_name, categories.category_id, COUNT(*)
AS 'threadCount' FROM threads
RIGHT OUTER JOIN categories
ON categories.category_id = threads.thread_category_id
GROUP BY categories.category_name, categories.category_id
它可以工作,但是,threadCount中的结果总是大于或等于1,即使其中没有线程
如上图所示,每个类别似乎都有一个附加的线程。但问题是,只有“类别1”有线程,所有其他类别都有0个附加线程,因此它们应该显示0而不是1。因为您做得很好,所以当您没有相应的线程时,外部连接null也被计为1。按如下方式运行查询,以了解我的意思
SELECT categories.category_name, categories.category_id
AS 'threadCount' FROM threads
RIGHT OUTER JOIN categories
ON categories.category_id = threads.thread_category_id
或者您可以通过如下更改查询来排除计数为1的null
SELECT categories.category_name, categories.category_id, COUNT(threads.thread_category_id)
AS 'threadCount' FROM threads
RIGHT OUTER JOIN categories
ON categories.category_id = threads.thread_category_id
GROUP BY categories.category_name, categories.category_id
因为您做的是正确的,所以当您没有相应的线程时,外部连接null也被计为1。按如下方式运行查询,以了解我的意思
SELECT categories.category_name, categories.category_id
AS 'threadCount' FROM threads
RIGHT OUTER JOIN categories
ON categories.category_id = threads.thread_category_id
或者您可以通过如下更改查询来排除计数为1的null
SELECT categories.category_name, categories.category_id, COUNT(threads.thread_category_id)
AS 'threadCount' FROM threads
RIGHT OUTER JOIN categories
ON categories.category_id = threads.thread_category_id
GROUP BY categories.category_name, categories.category_id
联接上的
Outer
包含所有类别,甚至包括未与任何线程连接的类别,因此至少有1个
SELECT categories.category_name, categories.category_id, COUNT(*)
AS 'threadCount' FROM threads
RIGHT OUTER JOIN categories
ON categories.category_id = threads.thread_category_id
GROUP BY categories.category_name, categories.category_id
我会把它做成
SELECT categories.category_name, categories.category_id,
(SELECT COUNT(*) FROM threads WHERE
categories.category_id = threads.thread_category_id) AS 'threadCount'
FROM categories
在这里,我直接计算每个类别的线程,不进行连接。连接上的
外部
包括所有类别,甚至包括未与任何线程连接的类别,因此至少有1个
SELECT categories.category_name, categories.category_id, COUNT(*)
AS 'threadCount' FROM threads
RIGHT OUTER JOIN categories
ON categories.category_id = threads.thread_category_id
GROUP BY categories.category_name, categories.category_id
我会把它做成
SELECT categories.category_name, categories.category_id,
(SELECT COUNT(*) FROM threads WHERE
categories.category_id = threads.thread_category_id) AS 'threadCount'
FROM categories
在这里,我直接计算每个类别的线程,但不进行连接。这是因为要显示的是
右外部连接
,以及未连接到线程的类别。如果移除外部线程,则只会看到与线程连接的类别,如果希望保留空类别。。。需要使其有所不同。这是因为要显示的是右外部联接
,以及未连接到线程的类别。如果移除外部线程,则只会看到与线程连接的类别,如果希望保留空类别。。。这是一个很好的观点,而且似乎是一个很好的方法。它确实起作用了,谢谢!这是一个很好的观点,而且似乎是一个很好的方法。它确实起作用了,谢谢!