0

私は3つのテーブルを持っています。A、B、C。A は B と 1 対多を持ちます。B は C と 1 対多を持ちます。

テーブル内のデータは、

TABLE A
id                 
10
15

TABLE B
id      firstName    AandB_Relation_Key
55       Abc           10
66       Pqr           10
77       xyz           10
88       ddd           15

TABLE C
id       phone_no      CandB_Relation_key
41        44444         77
42        55555         77
43        66666         77
44        88888         66

次のような方法で、単一のクエリでテーブル A の ID に応じてテーブル C からデータを取得したかったのです。

テーブル B にテーブル C の関連レコードがある場合、B と C の両方のレコードを表示したい場合は、テーブル B のレコードのみを表示します (つまり、ここでは firstName "xyz" に複数の電話番号があるため、xyz = 44444,55555,66666, ddd を表示します)電話がないので、ddd のみ)

現在、私は

a) AandB_Relation_Key=テーブル A の ID であるテーブル B からすべての ID を選択 // テーブル A の ID に対してテーブル B のすべての ID を返す

b) 次に、すべての id を反復処理し、テーブル C から各 id に対して count(*) を取得し、テーブル C から count(*) を選択します。ここで、id = a) から ID を取得します。

c) カウント > 0 の場合、テーブル B、C から firstName,phoneNo を選択

d) それ以外の場合は、テーブル B から firstName を選択します

ありがとう。

4

1 に答える 1

0
select new list(firstName,phone_no) from A left join B left join C where a.id=:id

そうすべきだと思います。オプションの電話番号を含むファーストネームのリストを取得します。

于 2012-07-21T08:24:12.547 に答える