我需要有選擇地檢索具有1對多關係的兩個表中的數據。一個簡單的例子如下。從2個表中檢索具有1對多關係的數據 - 使用1個查詢或2個更有效?
表A是事件的列表:
Id | TimeStamp | EventTypeId
--------------------------------
1 | 10:26... | 12
2 | 11:31... | 13
3 | 14:56... | 12
表B爲事件屬性的列表。不同的事件類型具有不同數量的屬性。有些事件類型有沒有屬性可言:
EventId | Property | Value
------------------------------
1 | 1 | dog
1 | 2 | cat
3 | 1 | mazda
3 | 2 | honda
3 | 3 | toyota
有一些條件,我會申請,當我檢索數據,但是它們都圍繞着桌子A.舉例來說,我可能要在一個只有事件某一天,或者只有某種類型的事件。
我相信我有檢索數據的兩個選項:
選項1
執行兩個查詢:首次查詢表A(用WHERE子句中)和存儲數據的地方,然後查詢表B(加盟在表A中,以便使用相同的WHERE子句)和「填入空白」中的數據,我從表A檢索到的數據。
此選項要求SQL Server通過表A執行2次搜索,但是生成的2個數據集不包含重複的數據。
選項2
執行單個查詢,與左接合表A至表乙JOIN。
此選項只需要對錶A進行一次搜索,但生成的數據集將包含許多重複的值。
結論
是否有一個「正確」的方式做到這一點還是需要嘗試兩種方式,看看哪一個更快?