MySQL根据链接表中的日期获取最后结果

时间:2015-01-22 10:06:58

标签: mysql join inner-join outer-join

我有一个问题需要你的帮助。

我将在示例场景中解释问题是什么。

有3个表:A,B,C。 B和C与表A有多对一的关系。 B表和C表对表A中的一个条目有多个条目。 我需要查询只有一个来自B和C的条目,但必须选择该条目,以便B和C中的最新日期条目是返回的条目。我不能依赖B和C中的ID,因为它们没有订购,也不保证最大的ID是正确的。 B和C中条目的日期仅为有效标准。

以下是示例数据的示例:

Table A

tableaid | Some data ...
------------------
 1 |  ....
 2 |  ....
 3 |  ....
 4 |  ....
    ...


Table B

id | linkid |    date    | colb |  Some data ...
----------------------------------------------
 1 |    1   | 01/01/2000 |  A1  |     ....
 2 |    1   | 05/20/2001 |  A2  |     ....
 3 |    1   | 07/10/2002 |  A3  |     ....
 4 |    2   | 10/27/2000 |  B1  |     ....
 5 |    2   | 01/01/2001 |  B2  |     ....
 6 |    2   | 06/01/2002 |  B3  |     ....
 7 |    3   | 05/01/2000 |  C1  |     ....
 8 |    3   | 01/01/2003 |  C2  |     ....
 9 |    4   | 05/01/2004 |  D1  |     ....
         ...

Table C

id | linkid |    date    | colc |  Some data ...
----------------------------------------------
 1 |    1   | 01/01/2000 |  a1  |     ....
 3 |    1   | 05/20/2005 |  a2  |     ....
 2 |    2   | 07/10/2000 |  b1  |     ....
 4 |    2   | 10/27/2003 |  b2  |     ....
 8 |    2   | 01/01/2005 |  b3  |     ....
 6 |    3   | 06/01/2001 |  c1  |     ....
 9 |    3   | 05/01/2005 |  c2  |     ....
 5 |    4   | 01/01/2000 |  d1  |     ....
 7 |    4   | 05/01/2004 |  d2  |     ....
         ...

Result
=============================================
tableaid | colb | colc | Some other data ...
---------------------------------------------
 1       |  A3  |  a2  | ...
 2       |  B3  |  b3  | ...
 3       |  C2  |  c2  | ...
 4       |  D1  |  d2  | ...
    ...

我知道如何只使用A和B或C,但不能使用A和B,C。任何帮助赞赏。我有饼干:))

1 个答案:

答案 0 :(得分:1)

使用

之类的子选择
select a.*,
 (select colb from tableb b where b.linkid = a.tableaid order by b.date desc limit 1) as colb
from tablea a

类似于colc的东西。