我不確定如何提出這個問題。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