我有两个表:如何选择链接表中是否存在特定链接或没有链接?
Videos
--------------
VideoID
VideoGroupID
CreatorUserID
和
VideoTags
--------------
VideoID
TagID
我想选择所有VideoGroupIDs其中的CreatorID是1,2,或3和有任一标签10,11,或12与视频关联或者没有与视频关联的标签。我可以在单个查询中执行此操作吗?
我有两个表:如何选择链接表中是否存在特定链接或没有链接?
Videos
--------------
VideoID
VideoGroupID
CreatorUserID
和
VideoTags
--------------
VideoID
TagID
我想选择所有VideoGroupIDs其中的CreatorID是1,2,或3和有任一标签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)
)
这将得到“左”表中的所有内容 - 视频 - 根据VideoId尝试匹配到VideoTags表。然后,它会将结果限制于那些标记为(10,11,12),或者如果没有标签识别的
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它将返回null为VideoTag列
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)