2016-05-10 9 views
0

ここに代表的なデータのサンプルがあります。最初のテーブルでは、行2と3は正しくありません。状態Bと行が存在し、Iが0に行2及び3にアクティブに設定することができる方法22番目のテーブルの複数の参照に基づく行の選択

+----+--------+--+ +-----+-----+--------+ 
| ID | ACTIVE | | | ID | REF | STATUS | 
+----+--------+--+ +-----+-----+--------+ 
| 1 |  0 | | | 9 | 1 | A  | 
| 2 |  1 | | | 100 | 2 | A  | 
| 3 |  1 | | | 103 | 2 | B  | 
| 4 |  1 | | | 104 | 2 | C  | 
+----+--------+--+ | 111 | 3 | A  | 
        | 123 | 4 | A  | 
        | 126 | 4 | B  | 
        +-----+-----+--------+ 

表状態Cと行が存在しない場合にのみ、表1の行がアクティブでなければなりませんこれらのルールに基づいていますか?

答えて

1

だけゼロであるべき行を更新し、あなたが

   UPDATE TABLE_A A 
       SET A.ACTIVE = 0 
       WHERE A.A_ID IN 
           (SELECT b.ref 
            FROM TABLE_B B 
            WHERE NOT EXISTS (SELECT 1 
              FROM TABLE_B 
              WHERE STATUS = 'B' 
              AND B.REF = REF) 
            OR EXISTS 
            (SELECT 1 
              FROM TABLE_B 
              WHERE STATUS = 'C' 
              AND B.REF = REF)) 
           AND a.active<>0; 
2

あなたは小枝に沿ってあなたが記述ロジックをupdateを使用することができます。

update t1 
    set active = (case when exists (select 1 from t2 where t2.ref = t1.id and t2.status = 'B') and 
          not exists (select 1 from t2 where t2.ref = t1.id and t2.status = 'C') 
         then 1 else 0 
        end); 
+0

を使用することができますよりも、一人で他のすべてを残したい場合は見栄えは良いですが、1にすべきものだけを残して1から0に変わるものに触れたい場合 – Andrew

関連する問題