Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
选择性SQL查询_Sql_Sql Server_Sql Server 2014 - Fatal编程技术网

选择性SQL查询

选择性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

我有3个表,
文件链接
文件
,其中每个项都可以有多个与其关联的文件

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?