如何在链接表中有特定链接或没有链接的地方进行选择?

时间:2009-06-24 23:46:55

标签: tsql

我有两张桌子:

Videos
--------------
VideoID
VideoGroupID
CreatorUserID

VideoTags
--------------
VideoID
TagID

我想选择CreatorID为1,2或3的所有VideoGroupID,并且有与视频关联的标记10,11或12,或者没有与视频关联的标签。我可以在一个查询中执行此操作吗?

2 个答案:

答案 0 :(得分:2)

我认为你想要一个带有空检查的左连接

SELECT DISTINCT v.videogroupid
FROM videos v 
    LEFT JOIN videotags vt on v.videoid = vt.videoid
WHERE
    v.creatoruserid in (1, 2, 3) 
    and (
        vt.tagid is null 
        or vt.tagid in (10, 11, 12)
    )

答案 1 :(得分:0)

这将从“左”表中获取所有内容,即视频 - 尝试将其匹配到基于VideoId的VideoTags表。然后它会将结果限制为标签所在的那些(10,11,12)或者没有TagId的

select *
from Videos V
left join VideoTags VT
on V.VideoId = VT.VideoId
where V.CreatorUserId in (1,2,3)
and (VT.TagId in (10, 11, 12) OR TagId is null)

原始答案 - 描述与查询匹配 - 但它没有解决问题

这将从“左”表 - 即视频 - 获取CreatorId所在的位置(1,2,3),并将其匹配到TagId所在的任何VideoTag(10,11,12)它无法与VideoTag匹配,它将为VideoTag列返回null

select *
from Videos V
left join VideoTags VT
on V.VideoId = VT.VideoId
and V.CreatorUserId in (1,2,3)
and VT.TagId in (10, 11, 12)