选择性 SQL 查询

Selective SQL Query

我有 3 个 table、ItemsFileLinksFiles,其中每个项目可以关联多个文件。

项目有 ItemID 和 ItemName。

FileLinks 是包含 ItemID 和 FileID 的项目和文件之间的 link table。

文件有 FileID、FileURL 和 FileCategory。

我想要一个列出指定类别的单个文件的所有项目(无重复)和 URL 的查询,如果没有文件,则 URL 字段中有一个空白那个类别。

我是这样开始的:

select items.itemid, items.itemname, files.url
from items
inner join filelinks on items.itemid = filelinks.itemid
inner join files on filelinks.fileid = files.fileid
where files.filecategory = 1

但这只会显示具有该类别文件的项目,并隐藏那些不具有该类别文件的项目,如果每个项目有多个文件,则会复制项目列表。我需要所有项目,并且只需要该类别中的单个文件或空白。

示例数据:

items
ItemID ItemName
1     apple
2     orange

filelinks
itemid fileid
1 1
1 2 
2 3
2 4

files
fileid category url
1     main apple.jpg
2     secondary apple2.jpg
3     main orange.jpg
4     secondary orange2.jpg

if category = main, then results should be

itemid itemname url
1      apple    apple.jpg
2      orange   orange.jpg

执行 LEFT JOIN 以获取没有任何文件链接或文件的项目:

select items.itemid, items.itemname, files.url
from items
left join filelinks on items.itemid = filelinks.itemid
left join files on filelinks.fileid = files.fileid
               and files.filecategory = 1

要为一个项目只获取一个文件,请执行 GROUP BY 并选择 MIN 一个:

select items.itemid, items.itemname, MIN(files.url)
from items
left join filelinks on items.itemid = filelinks.itemid
left join files on filelinks.fileid = files.fileid
               and files.filecategory = 1
group by items.itemid, items.itemname