我有一个简单的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的标准。
任何帮助或指示赞赏
由于
答案 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>
);