选择性SQL查询
我有3个表,选择性SQL查询,sql,sql-server,sql-server-2014,Sql,Sql Server,Sql Server 2014,我有3个表,项,文件链接和文件,其中每个项都可以有多个与其关联的文件 Items具有ItemID和ItemName FileLinks是项目和包含ItemID和FileID的文件之间的链接表 文件有FileID、FileURL和FileCategory 我想要一个查询,列出所有项目(无重复项)和指定类别的单个文件的URL,如果没有该类别的文件,则URL字段中为空 我从这个开始: select items.itemid, items.itemname, files.url from items i
项
,文件链接
和文件
,其中每个项都可以有多个与其关联的文件
Items具有ItemID和ItemName
FileLinks是项目和包含ItemID和FileID的文件之间的链接表
文件有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
执行
左连接,也可以获取没有任何文件链接或文件的项目:
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
要为一个项目仅获取一个文件,请执行分组操作
,然后选择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
SQL Server 2014,标记addedProvide示例数据和所需结果。如果内部联接,请尝试左联接。如果每个项目有多个文件(该项目在列表中出现两次),则左联接似乎仍会提供重复项。您具有一对多关系,但希望获得一对一。如果此项目的此类别中有多个文件,如何定义应为特定项目返回的FileURL?