为mysql中的每个返回记录选择最大值

时间:2018-01-14 10:05:42

标签: mysql

我的表看起来像这样

表1:

relid  BID 
1      1
1      2
1      3 

表2:

id BID priority info 
1  1   0        Json string
2  1   1        **
3  1   2        ****
4  2   0        *** 
5  2   1        **** 

6  3   0       ****

问题是我想使用{strong> table1 选择 table1 中仅具有最高优先级的所有BID,这意味着我想获得这个结果

inner join

我已经使用过这个查询,它运行正常,但是有大量的记录,它的运行速度太慢!!在 MySQL 中,抓取时间可能会持续长达70秒,这对我的服务器来说是一场灾难!

id  BID  Priority info 
3   1    2        Json String info
5   2    1        *** 
6   3    0         ***

任何人都有其他建议,可能会有更好的表现!

1 个答案:

答案 0 :(得分:0)

请考虑以下事项:

SELECT y.id 
     , y.bid 
     , y.priority 
     , y.info
  FROM table1 x
  JOIN table2 y
    ON x.BID = y.BID 
  JOIN (SELECT bid, MAX(priority) max_priority from table2 GROUP BY bid) z
    ON z.bid = y.bid
   AND z.max_priority = y.priority
 WHERE x.relid = 1;

为了进一步改进,我们确实需要查看所有相关表的正确CREATE TABLE语句以及EXPLAIN的结果