我不确定如何提出这个问题。TSQL查询所有记录必须存在以返回记录
我的标签表:
TagId Tag
----- -----
1 Fruit
2 Meat
3 Grain
我有事件表:
EventId Event
------- -----------
1 Eating Food
2 Buying Food
,我需要做的是带回只有那些与它相关联的所有选定的标签活动。
如果选择了三个标签,则只显示包含全部三个标签的事件。
例如:
映射表
EventId TagId
------- -----
1 1
1 3
2 1
如果我写这样的查询:
select * from MapTable where where tagId in (1,3)
这将返回进食和购买食物。
但我需要做的是带回标签为1和3的事件。这意味着在这种情况下,我将返回的唯一事件就是“吃饭食物”,因为它同时包含所选标签。
我想知道这是否可以在TSQL中完成,或者如果我将不得不使用业务层将它翻译成对象返回到GUI。
谢谢。
这会在事件ID具有重复标记的情况下潜在地返回误报 - 例如, (EventId,TagId)包含(1,1)和(1,1)。 – 2011-06-09 00:59:00
我已经假设事件不会得到重复的标签。我不认为这是不合理的。我试图想到一个重复标签会有用的情况(考虑到问题中的信息) – Beno 2011-06-09 01:04:18
标签不会重复,因为您在映射中对事件,标签组合具有唯一约束。这是一个有趣的解决方案。 – nitefrog 2011-06-09 01:10:56