繁体   English   中英

形成此查询的最佳方法

[英]Best Way to form this query

球队,

我有三张桌子。

myTransTable,myMasterTable 1,MymyMasterTable 2

myTransTable有很多条目“ Rank.No”,自动缩进字段用于标识单个记录。 “ U.Name”保存用户名。 每个用户在此表中可以有多个记录。 但是可以通过Rank的最大值找到用户的最新交易。按“ U.Name”分组后,否。

一旦获得此最大记录(即最近的事务),就需要从其他表中获取其关联数据

如何以最有效的方式做到这一点。

1.myTransTable(字段Rank.No(自动递增字段),名称,RecNum,uname,日期,类型)

2.myMasterTable1(RecNum,Recowner,recdate)

3.MymyMasterTable2(uName,age,address,contact num)

我尝试了这些方法来选择最大记录并从其他表中获取关联的数据

  1. 最大记录作为视图并使用常规查询从其他表中获取数据
  2. 最大记录和关联数据本身作为视图,并根据需要选择数据

哪种方法可以缩短执行时间?

我的查询是找到最大值的最佳方法。

选项一

select a.`RecNum`,a.`Name`,a.`Date`, a.`type`"+
            "from myTransTable a "+
            "INNER JOIN "+
            "(SELECT RecNumMAX(`Rank.No`) AS maxserialnum FROM myTransTable "+
            "GROUP BY RecNumMAX)groupedRecNumMAX "+
            " ON "+
            " a.RecNum = groupedPWO.RecNum  "+
            "AND "+
            "a.`Rank.No`  = groupedRecNumMAX.maxserialnum "+

选项二

Select a.`RecNum`,a.`Name`,a.`Date`, a.`type`"+` 
FROM                   from myTransTable a

WHERE                    s.`RecNum` in(select MAX(`RecNum`)
       from               myTransTable 
       group by       RecNum)

这只是一个建议,与您的第一个查询有关..似乎包含对表和列名的错误引用

寻找代码,您应该使用这样的查询

select a.`RecNum`
    ,a.`Name`
    ,a.`Date`
    , a.`type`
  from myTransTable a 
  INNER JOIN   (
      SELECT RecNum, MAX(`Rank.No`) AS maxserialnum 
      FROM myTransTable 
      GROUP BY RecNum 
  )  g ON  a.RecNum =g.RecNum  AND  a.`Rank.No`  = g..maxserialnum 

并在RecNum和Rank.No上使用适当的索引..应该是性能最高的(您可以通过简单的测试和适当的执行测试来检查解释)

您不应该使用点名分隔的列名作为Rank.No ..使用Rank_No isteand并且对于列名也不要使用小写字母,也不要混合使用UpperOrLower大小写,请使用下划线代替单词

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM