SQL JOIN分组查询:获取包含空文件夹的文件统计数
解决空文件夹未显示的问题
嘿,这个问题我太熟了!你当前的查询用的是隐式内连接(用逗号分隔两张表),这种连接方式只会返回两边都有匹配数据的行——也就是说,如果某个文件夹里没有符合条件的文件,它就会被直接过滤掉,这就是空文件夹没出现在结果里的原因。
要搞定这个,咱们得换成左连接(LEFT JOIN),它会保留左边表(也就是folders)里所有符合条件的记录,哪怕右边表(files)没有对应的匹配项。同时还要注意过滤条件的位置,不然左连接会变相变成内连接。
给你调整后的查询语句:
SELECT folders.id, folders.name, COUNT(files.id) AS kount FROM folders LEFT JOIN files ON files.folder_id = folders.id AND files.ignored = 0 AND files.site_id = 111 WHERE folders.site_id = 111 AND folders.ignored = 0 GROUP BY folders.id, folders.name;
关键改动说明:
- LEFT JOIN替代隐式内连接:确保所有满足
WHERE条件的文件夹都能被返回,不管有没有对应文件 - 把files的过滤条件放到ON子句:这样只会连接那些未被忽略、属于对应站点的文件,不会因为没有匹配文件就过滤掉文件夹
- COUNT(files.id):当文件夹没有对应文件时,
files.id会是NULL,COUNT会自动忽略NULL值,返回0,正好符合空文件夹的文件数统计需求(别用COUNT(*),不然空文件夹会被统计成1)
这样修改后,你就能看到所有未被忽略的文件夹,包括那些没有文件的空文件夹啦~
内容的提问来源于stack exchange,提问作者zzmaster
相关产品推荐
相关产品推荐

