我有两张桌子:
Videos
--------------
VideoID
VideoGroupID
CreatorUserID
和
VideoTags
--------------
VideoID
TagID
我想选择CreatorID为1,2或3的所有VideoGroupID,并且有与视频关联的标记10,11或12,或者没有与视频关联的标签。我可以在一个查询中执行此操作吗?
答案 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)