加入并显示表中的不同列

时间:2012-07-16 13:36:31

标签: sql join inner-join

我有一个简单的SQL问题,我认为这将是非常简单的,但我已陷入困境。任何帮助将不胜感激

我有一个包含最后更新的表A. 表A具有表1中的一对多 表B具有表C中的一对多

我希望显示表C的所有行以及表A中的最后更新时间。我尝试了一些连接,但它们似乎没有完全正常工作。理想情况下,我想要像

一样
select a.lastUpdated c.* from TableA a, TableC c where
a.id in (select a_id from TableB where (select b_id from TableC where c_id = select 
id  from TableC where XXXX=YYYY))

所以我可以为表C传入一个id,然后在最后一次更新时间内返回一行。

XXX = YYY是我返回一行表C的标准。

任何帮助或指示赞赏

由于

3 个答案:

答案 0 :(得分:2)

您应该可以通过将A和B连接在一起,在c_id级别聚合结果,然后加入C来实现此目的:

select tc.*, maxlastupdated
from tablec tc left outer join
     (select tb.c_id, max(lastupdated) as maxlastupdated
      from tablea ta join
           tableb tb
           on ta.b_id = tb.b_id
      group by ta.id
     ) ta
     on tc.c_id = ta.c_id

答案 1 :(得分:2)

这样的东西
SELECT c.* 
FROM TableA AS a 
    INNER JOIN TableB AS b 
    ON a.a_id = b.b_id 
        INNER JOIN TableC AS c 
        ON b.b_id = c.c_id 
WHERE a.lastUpdated = c.lastUpdated;

应该有效。这是一个直INNER JOIN就足够了的情况;除非我错过了什么。

我希望这会有所帮助。

答案 2 :(得分:1)

您需要从表C中驱动您的SQL查询。 下面的查询显示表A中更新的时间戳列。 因为它是表A - >的方向上的一对多。 B - > C 您将不可避免地在表C中以很多行结束 - 所有行都具有相同的时间戳。

SELECT c.*, a1.update_timestamp 
FROM table_c c, table_b b, table_a a1
WHERE c.join_column = b.join_column
AND b.join_column = a1.join_column
AND a1.update_timestamp =
(SELECT max(a2.update_timestamp) FROM table_a a2
WHERE a2.<identifying columns> = a1.<identifying columns>
);