我需要有选择地检索具有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进行一次搜索,但生成的数据集将包含许多重复的值。
结论
是否有一个“正确”的方式做到这一点还是需要尝试两种方式,看看哪一个更快?