1

簡単なSQLの質問があります。それは非常に簡単だと思いましたが、混乱しました。どんな助けでもいただければ幸いです

最後に更新されたテーブルAを含むテーブルAがテーブルBと1対多を持っていますテーブルBはテーブルCと1対多を持っています

テーブルAから最後に更新された時刻を含むテーブルCのすべての行を表示したいと思います。いくつかの結合を試しましたが、うまく機能していないようです。理想的には私は何かのようなものが欲しい

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を渡して、最後に更新された時刻が存在する1つの行を返すことができます。

XXX = YYYは、テーブルCの1行を返すための私の基準になります。

ヘルプやポインタをいただければ幸いです

ありがとう

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 の方向で 1 対多であるため、必然的に終了します -テーブル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 に答える