1

我有一个简单的 SQL 问题,我认为这会很直接,但让自己陷入了混乱。任何帮助,将不胜感激

我有一个包含最后更新的表 A 表 A 与表 B 一对多 表 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 的一行的标准。

任何帮助或指针表示赞赏

谢谢

4

3 回答 3

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
于 2012-07-16T13:41:26.433 回答
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就足够了;当然,除非我错过了什么。

我希望这有帮助。

于 2012-07-16T13:45:05.193 回答
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>
);
于 2012-07-16T13:56:19.667 回答