选择性 SQL 查询
Selective SQL Query
我有 3 个 table、Items
、FileLinks
和 Files
,其中每个项目可以关联多个文件。
项目有 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
我有 3 个 table、Items
、FileLinks
和 Files
,其中每个项目可以关联多个文件。
项目有 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