..其中Table_A是:
CODE,DATE_A
和TABLE_B是:
CODE,DATE_B
AND Table_A.CODE = Table_B.CODE
MySQL 5.5中的。请问哪种方式最有效?两个表的主键都是我提供的两个字段的组合(为简单起见)。
谢谢!
答案 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
);
这可能比我原来的查询表现得更好。