1
我们有记录(表1),他们拥有通过在子表(表2)中插入记录而发生的工作流(已提交,已批准等)。例如,如果提交了表1中的记录,则会插入表2中对应的具有工作流状态(StatusField),日期和提交人员的记录。当我然后尝试根据其状态(例如,仅提交的记录)查询Table1时,我试图找出最有效的方式并且不确定。我试过创建函数,其中Table1的PK是参数,然后使用匹配的FK从Table2中踢出最新的状态字段。我也尝试了用Table 2的PK来查看由FK分组的Max PK,然后通过LEFT OUTER JOIN进行链接(因为表2中没有相应的记录,表示状态未决)。这似乎更快的方法是做一个子查询,像这样:从子表获取状态的最有效方式
SELECT a.*
,(SELECT TOP 1 StatusField
FROM Table2 b
WHERE b.FK=a.PK
ORDER BY b.DateField DESC) StatusField
FROM Table1 a
WHERE (SELECT TOP 1 StatusField
FROM Table2 b
WHERE b.FK=a.PK
ORDER BY b.DateField DESC)='Submitted'
我仍然觉得自己有一个更好的办法。有什么想法吗?如果有人能指点我的类似问题和答案,那也会很棒。谢谢!
该作品,不知道它还有多快,但很快就会测试。谢谢你这么快速的回应! – Julian
加快速度的一种可能方法是使派生表最大化物理表并对其进行索引。这将加速与table1的连接,并允许table2通过索引(fk,datefield)直接连接到最大结果。祝你好运! – RMathis
速度更快,谢谢! – Julian