SQL JOIN - 将所有左行分组

时间:2018-04-12 11:04:01

标签: sql join relation

所以,我有一些名为文件文件夹的表格,其中包含ID和常用关系:file.folder_id = folder.id

此外,字段忽略可以忽略某些文件/文件夹。

我正在尝试获取相应文件夹中的文件夹列表和文件计数。 我的第一种方法工作正常,但错过了空文件夹:

SELECT folders.id, folders.name, count(files.id) kount
FROM folders, files

WHERE folders.site_id=111
AND files.ignored=0
AND folders.ignored=0 
AND files.site_id=111
AND files.folder_id=folders.id

GROUP BY folders.name 
ORDER BY folders.name

所以我寻找LEFT JOIN

SELECT folders.id, folders.name, count(files.id) kount
FROM folders 


LEFT JOIN files 
ON files.folder_id=folders.id

WHERE folders.site_id=111
AND folders.ignored=0
AND files.ignored=0
AND files.site_id=111


GROUP BY folders.name 
ORDER BY folders.name

但是再次 - 缺少空文件夹。我做错了什么?

2 个答案:

答案 0 :(得分:1)

您需要将连接表的条件直接放入left join

SELECT folders.id, folders.name, count(files.id) 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.name 
ORDER BY folders.name

答案 1 :(得分:0)

试试这个。

SELECT folders.id, folders.name, count(files.id) 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.name 
ORDER BY folders.name