2012-07-16 56 views
1

我有一個簡單的SQL問題,我認爲這將是非常直接的,但讓自己陷入混亂。任何幫助,將不勝感激加入並顯示錶格中的不同列

我有一個包含上次更新 表一個表有一對多與表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.

任何幫助或指針讚賞

感謝

回答

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

您應該能夠通過連接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

您需要驅動從表C.您的SQL查詢 查詢下面顯示從表A 更新時間戳列既然是一個一對多表A的方向 - 「乙 - > 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> 
); 
相關問題