私は本質的にtableB
の情報に基づいてtableA
の単一レコードに参加しようとしています。元の結合条件で複数の結果が得られたら、さらに追加してクエリを再実行します。結果が得られない場合は、何も転送されません。例:a.FRST_NM = b.FRST_NM
を検索します。結果が1つの場合は、レコードを引き出します。複数ある場合はLAST_NM
を追加し、結果が1つの場合はそのレコードをプルします。私が1つのレコードを得るまで、そうします。一度に1つずつすることはできますが、これは1回のパスにつき2〜3回発生します。検索を実行してメンバーを特定する
これは、1つのテーブルには入力されていないフィールドがあるためです。 FROM
ステートメント全体を書き直さずに結合条件を追加する方法や、結果が1つしかない場合にのみレコードをプルする方法はわかりません。
IF(CONDITION_1 from JOIN_1) = 1 result THEN a.field_1 = b.field_1 and a.field_2 = b.field_2
IF (CONDITION_1 from JOIN_1) > 1 result THEN (additional joining conditions + JOIN_1) as JOIN_1a
ELSE IF(CONDITION_1 from JOIN_1a) = 1 result then a.field_1 = b.field_1 and a.field_2 = b.field_2
IF(CONDITION_1 from JOIN_1) = 0 results then NO MOVE
--(Repeat with different tables and joining conditions)--
したがって、結合条件を変更する代わりに、代わりにCASE式を作成しますか?それは実際に簡単に聞こえる。特に、後のパスではいくつかのテーブルが削除され、別のテーブルが追加されるためです。 –
これは、検索するすべてのテーブルが最初にLEFT JOINとして結合されていることを前提としています。次に、case文に基づいて優先順位を設定するrow_number()優先順位を作成して、必要なレコードを選択します。しかし、あなたはまだテーブルのすべてを最初に結合しなければなりません... – Matt
これは最初のパスで動作しますが、後のパスでテーブルが削除され、> 1または= 0の結果が出たら実行するために異なるテーブルに参加します。 –