Mysql查看来自其他表的多个连接,没有多次查找

时间:2018-03-16 10:12:55

标签: mysql sql sql-order-by sql-view

我试图更好地学习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. 

0 个答案:

没有答案