0

各ケース メンバーの行を含む CASE_MEMBER テーブルと、ケースでのメンバーの役割を示すフィールドがあります。ロール「親」とロール「子」としましょう。

ユニバースに CASE_MEMBER テーブルを追加し、Parent オブジェクトと Child オブジェクトを作成しました。各オブジェクトには、役割フィールドの正しい値を指定する WHERE ステートメントが含まれています。

これらの両方のオブジェクトを使用してレポートを作成しようとすると、CASE_MEMBER に 1 回だけ結合され、"where role = 'Parent' and role = 'Child'" という条件で結合されますが、これは明らかに不可能です。

そのため、メンバー タイプごとに 1 回、クエリを強制的に CASE_MEMBER に結合する必要があります。CASE_MEMBER の複数のエイリアスを作成することによってこれを行う唯一の方法はありますか? または、これを行う別の方法で、ユニバース構造をきれいに保ち、実際のデータ モデルに近づけることはできますか?

4

1 に答える 1

1

CASE_MEMBER のエイリアスを作成し、結合に WHERE 条件を含めます。したがって、結合は次のようになります。

CASE_MEMBER から DEMOGRAPHICS の場合:

case_member.member = demographics.memberid and case_member.role='child'

CASE_MEMBER から DEMOGRAPHICS_PARENT (DEMOGRAPHICS のエイリアス) の場合:

case_member.member = demographics_parent.memberid and case_member.role='parent'

(他の質問のフィールド名を使用して) case_member.caseid から「ケース ID」オブジェクト、demographics.ssn から「子 SSN」、および demographics_parent.ssn から「親 SSN」を作成するとします。これら 3 つのオブジェクトすべてを含むレポートを作成すると、次のようになります。

SELECT
   case_member.caseid,
   demographics.ssn,
   demographics_parent.ssn
FROM
   case_member,
   demographics,
   demographics demographics_parent
WHERE
   (case_member.member = demographics.memberid 
        and case_member.role='child')
   (and case_member.member = demographics_parent.memberid 
        and case_member.role='parent')

あなたが望むものを生み出すはずです。

この例では、子テーブルと親テーブルの両方を含めているため、結果セットに 2 つの行が含まれることに注意してください。1 つは子 SSN が空白で、もう 1 つは親 SSN が空白です。これを回避するには、それぞれに max() を配置する必要があります。

于 2013-07-24T15:38:08.153 に答える