2017-08-11 35 views
0

私は2つのテーブルのプロジェクトとコードを持っています。コード表には、プロジェクトからコードへの1対多の関係を持つプロジェクト表の参照があります。今、私の要件は、私のプロジェクトのテーブルには、データを以下している場合などの場合はそのプロジェクトのコードテーブルにのみ最初のレコードのラベルによって参照テーブルからの最初の照合参照値でのみ、参照テーブルからデータを取得する方法はありますか?

を、すべてのプロジェクトデータの順序を得ることです:

PROJECT_ID PROJECT_NAME PROJECT_TYPE 
1   a    test1 
2   b    test2 

とコード以下の表は、持っています上記のデータのうち、project_idが外部キーである場合、最初にプロジェクトID 2を取得し、最初にプロジェクトIDを1とし、最初のマッピング値にラベルdが含まれていなければなりません。私はこれのための解決策を見つけることができません。

ID PROJECT_ID LABEL 
1  1   d 
2  1   b 
3  1   c 
4  2   a 

所望の出力

PROJECT_ID PROJECT_NAME PROJECT_TYPE 
    2   b    test2 
    1   a    test1 
+0

「1人のあまりにも多くの関係...」:) –

+0

@TabAllemanはい –

+0

はあなたの所望の出力のサンプルを共有することはできますか? – Phil

答えて

0

あなたの句「最初のマッチングは、」曖昧である - それはあなたのコードテーブルにLABELまたはIDにより発注を参照することができます。最初の選択肢、ラベルによる注文を前提とすると、次のようなものはプロジェクトデータを希望の順序で生成するはずです。

select p.* 
from  project as p 
     inner join (
      select project_id, min(label) as lbl 
      from  code 
      group by project_id 
      ) as c on c.project_id=p.project_id 
order by c.lbl; 

あなたの代わりにIDで注文する必要がある場合は、ちょうどそれに対応サブクエリとORDER BY句を変更します。

+0

参加はプロジェクトに基づいていますが、注文はラベルに記載する必要があります。しかし、順序は、コードテーブルの最初の一致するレコードにのみする必要があります。もし問題があるのであれば教えてください。 –

0

最初のオカレンスと一致する集約関数がないため、最初のオカレンスのコードIDを最初に検索し、次にそのオカレンスのラベル値を取得するためにもう1つのジョインを作成する必要があります。 :

SELECT p.* 
FROM PROJECT p 
JOIN (SELECT MIN(ID) AS ID, PROJECT_ID 
     FROM code 
     GROUP BY PROJECT_ID) AS findFirst 
     ON findFirst.PROJECT_ID = p.PROJECT_ID 
JOIN code c ON findFirst.ID = c.ID 
ORDER BY c.LABEL 
関連する問題