Tsql 如何选择链接表中有特定链接或没有链接的位置?

Tsql 如何选择链接表中有特定链接或没有链接的位置?,tsql,Tsql,我有两张桌子: Videos -------------- VideoID VideoGroupID CreatorUserID 及 我想选择CreatorID为1、2或3且有标记10、11或12与视频关联或没有标记与视频关联的所有VideoGroupID。我可以在单个查询中完成此操作吗?这将从“左”表(即视频)中获取所有内容-尝试根据视频ID将其与VideoTags表匹配。然后,它会将结果限制在标签所在的位置(10、11、12),或者如果没有标签ID的位置 select * from Vid

我有两张桌子:

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


我想选择CreatorID为1、2或3且有标记10、11或12与视频关联或没有标记与视频关联的所有VideoGroupID。我可以在单个查询中完成此操作吗?

这将从“左”表(即视频)中获取所有内容-尝试根据视频ID将其与VideoTags表匹配。然后,它会将结果限制在标签所在的位置(10、11、12),或者如果没有标签ID的位置

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)

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

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)
    )
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)
    )