我试图更好地学习sql,更具体地观看,但我无法通过以下方式为我解决问题。 我在这里放了一个精简版。基于来自tbl2匹配的外键,我需要做更多的连接。
由于它是一个视图,我无法创建临时表。
在这种情况下,我不能依赖存储过程。
我可以做外部应用,但只能获得特定的引用(第1,2行......),这将是通过从Table2执行Select *,其中......这意味着每次进行1次索引扫描用它。
我可以使用"使用tbl2(FK_TABLE1 ...)作为dbo.TABLE2中的SELECT FK_TABLE1来创建视图,但这似乎没有帮助。每次引用都会进行排序或扫描,因此无法获得任何收益。
有没有什么方法我可以创建一些我可以重用的列表,所以我只需要运行1个索引扫描就可以从Table2获得匹配的列表? 还是有另一种方式来考虑这个问题吗?
Table1 (PK, XX, YY)
Table2 (PK, FK_TABLE1, Type, Progress, ZZ, FK_Status)
Create View MyView
as
Select
Table1.PK
,Table1.XX
,Table1.YY
---- I want to present data from the first 3 matches
,(SELECT ZZ from tbl2 where tbl2.FK_TABLE1 = FK_TABLE1.PK ORDER BY Type ASC OFFSET(0) ROWS FETCH NEXT (1) ROWS ONLY) ZZ1
,(SELECT ZZ from tbl2 where tbl2.FK_TABLE1 = FK_TABLE1.PK ORDER BY Type ASC OFFSET(1) ROWS FETCH NEXT (1) ROWS ONLY) ZZ2
,(SELECT ZZ from tbl2 where tbl2.FK_TABLE1 = FK_TABLE1.PK ORDER BY Type ASC OFFSET(2) ROWS FETCH NEXT (1) ROWS ONLY) ZZ3
,sts.StatusName CurrentStatus
From Table1
LEFT OUTER JOIN Table2 AS tbl2 ON (tbl2.FK_TABLE1= Table1.PK) ---- Here I want to make some sort of join so I get all matching rows from the other table
LEFT OUTER JOIN STATUS AS sts ON (sts.PK = [tbl2 ordered by type, if last elements status = X take that, else status of first).FK_STATUS) ---- Here I'm a bit puzzled, since I have to order by, but also have a fallback value if last element isn't matching.