2009-06-24 39 views
0

我有两个表:如何选择链接表中是否存在特定链接或没有链接?

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

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

我想选择所有VideoGroupIDs其中的CreatorID是1,2,或3和有任一标签10,11,或12与视频关联或者没有与视频关联的标签。我可以在单个查询中执行此操作吗?

回答

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

这将得到“左”表中的所有内容 - 视频 - 根据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)