从TableB获取比TableA记录更旧的最新记录

时间:2014-07-14 17:56:17

标签: mysql

..其中Table_A是:

CODE,DATE_A

和TABLE_B是:

CODE,DATE_B

AND Table_A.CODE = Table_B.CODE

MySQL 5.5中的

。请问哪种方式最有效?两个表的主键都是我提供的两个字段的组合(为简单起见)。

谢谢!

1 个答案:

答案 0 :(得分:0)

我会使用相关子查询来执行此操作:

select a.*,
       (select b.date_b
        from tableb b
        where b.code = a.code and
              b.date_b < a.date_a
        order by b.date_b desc
        limit 1
       ) as date_b
from tablea a;

这将检索日期,并最好使用tableb(code, date_b)上的索引。要获取其余字段,请将tableb加入查询。

编辑:

要获得该行的其余部分,您可以执行以下操作:

select *
from (select a.*,
             (select b.date_b
              from tableb b
              where b.code = a.code and
                    b.date_b < a.date_a
              order by b.date_b desc
              limit 1
             ) as date_b
      from tablea a
     ) a join
     tableb b
     on b.code = a.code and b.date_b = a.date_b;

虽然MySQL将实现子查询,但这可能仍然比使用group by更快,这是另一种选择。您也可以将查询编写为:

select *
from tablea a join
     tableb b
     on a.code = b.code
where not exists (select 1
                  from tableb b2
                  where b2.code = b.code and
                        b2.date_b > b.date_b
                 );

这可能比我原来的查询表现得更好。