2016-10-20 16 views
0

問題ランキングが必要な複数の条件でSQLを結合する

複数の条件で結合する必要がある2つのテーブルがあります。ほとんどの部分については、これは最後の条件を除いて単純です:

Select * from tableA 
left outer join tableB on condition1 
         OR condtion2 
         OR condtion3 
         OR condtion4 
         OR <the record with the most recent tableB.date before tableA.date that has not already been joined in the above conditions> 

私は、このようなクロスパス、無駄にネストされたクエリとケースステートメントを使用するなど、いくつかのオプションを試してみました。 (常に1:Mの一致、または不正確な一致をゲットしているようです)

1:1マッピングしかないことを保証する方法はありますか?つまり、テーブルBのレコードがすでにレコードにマップされている場合以前の状態を経由にtableAで最後の条件にそれと一致しないために)

例:?

テーブルA:(意思決定)

ID 
----- 
DEC1 
DEC2 
DEC3a 
DECX 

テーブルB:(タスク)

ID  
----- 
TASK1 
TASK2 
TASk3 
TASK4 

アウト予想:

DecID|TaskID 
------------ 
DEC1 |TASK1 
DEC2 |TASk2 
DEC3a|TASK3 
DECX |TASK4 

最初の3行は、既存の条件によって覆われています。 DECXはまだマップされていないタスクにマップすることができます

+3

代わりにいくつかのサンプルデータと期待どおりの結果を表示できますか? –

答えて

0
Select * from tableA 
left outer join tableB 
    on condition1 
    OR condtion2 
    OR condtion3 
    OR condtion4 
UNION 
Select * from tableA 
left outer join tableB 
    on <the record with the most recent tableB.date before tableA.date that has not already been joined in the above conditions> 
    AND NOT condition1 
    AND NOT condition2 
    AND NOT condition3 
    AND NOT condition4