2012-01-14 3 views
1

3つのテーブルのデータが必要な場所で1つの結果を得ることは可能ですか?SQL結合データ

最初の表:私は(主キーによって見出さ1行)すべてのフィールドを取得する必要が

二番目の表:私はフィールド「ユーザ名」を取得する必要があります(「MASTER_ID」によって最初のテーブルに接続されています)

3番目のテーブル:関連するmaster_idキー(テーブルに 'date'、 'master_id'、 'previous_name'がある)を追加する必要があります。

答えて

5
select top 1 first.*, second.username, third.* 
from first 
inner join second on first.id = second.master_id 
inner join third on first.id = third.master_id 
order by 
third.date desc 

いつも猫を肌する方法の数十があるので、私はこれは、サブクエリの方法として最適化されているかどうかわからないんだけど、それが動作するはずです。

+0

+1あなたが1行後になった場合は、間違いなく最良の選択です! – Andomar

+0

ああ、1行だけ!まあ、プレイしました! – MPelletier

1

3つのテーブルを結合することができます。あなたはその3番目のテーブルのための相関副問合せをする必要があります

select * 
from Table1 t1 
join Table2 t2 
on  t2.master_id = t1.master_id 
join Table3 t3 
on  t3.master_id = t1.master_id 
join (
     select master_id 
     ,  max(date) as max_date 
     from Table3 
     group by 
       master_id 
     ) as filter 
on  t3.master_id = filter.master_id 
     and t3.date = filter.max_date 
1

:次に、あなたは、「フィルタ」のみ、最新の表3の行を保つために参加を使用することができます。

SELECT t1.*, username, date, previous_name 
FROM FirstTable t1 
INNER JOIN SecondTable t2 ON t1.master_id=t2.master_id 
INNER JOIN 
(SELECT master_id, date, previous_name 
FROM ThirdTable AS t3_1 
WHERE date = (
     SELECT MAX(date) 
     FROM ThirdTable AS t3_2 
     WHERE t3_2.master_id=t3_1.master_id)) q1 ON q1.master_id=t1.master_id; 

注:未テストです。

+0

無関係のサブクエリも機能します。私の答えを参照してください。関連クエリは、特にmaster_idにインデックスがある場合は、少量の行に対してよりうまくいくはずです – Andomar