2016-04-04 23 views
0

でinto..select挿入が、私は2つのテーブルを持っている状態

表1:

process status 
1  completed 
2  completed 
3  not completed 

table 2。 TABLE1

からデータを取得する履歴テーブルが

は、このような

、ステータスが「完了していない」されたデータをプッシュすることをデータは表1から履歴テーブルにプッシュされます次回は、私が唯一たい

process status 
1  completed 
2  completed 
3  not completed 

です私の履歴テーブルが

、以下の表2(履歴テーブル)のように見えること

Process status 
    1  completed 
    2  completed 
    3  not completed 
    3  completed 

これで私を助けてください、私はサブクエリを試してみましたが、それは働いてイマイチ私のために。

私はこのクエリを使用:

INSERT INTO table2 
    SELECT * 
    FROM table1 
    WHERE NOT (status IN (SELECT Status 
          FROM table2 
          WHERE status = 'completed')) 

答えて

0

はこれを試してみてください。

INSERT INTO table2 (process,status) 
select process,'completed' as status From table1 where process in 
(select distinct process from table2 where status <> 'completed') 
+0

insert'文の 'に' * 'お勧めしません。単一の値を比較すると、より意味のあるものになります。 –

+0

ステータス<>が完了したテーブル2のレコードのステータスを確認し、テーブル1のレコードのみをフェッチする必要があります。 – LOL

+0

'table2'の' statusを 'complete'として' table2'に挿入したいのですか? – Utsav

0

AFAIは、あなたの質問を理解し、あなただけの(フローが完了する不完全から線形であると仮定して)状態を完了するために、不完全から変更されているプロセスのステータスの更新を必要としています。

INSERT INTO table2 (process,status) 
SELECT 
T1.process as process, 
CASE T1.state WHEN 0 THEN 'not completed ' ELSE 'completed' END as status 
FROM 
(SELECT process, MAX(CASE WHEN status = 'not completed' THEN 0 WHEN status ='completed' THEN 1 END) state from table1 group by process) T1 
LEFT JOIN 
(SELECT process, MAX(CASE WHEN status = 'not completed' THEN 0 WHEN status ='completed' THEN 1 END) state from table2 group by process) T2 
ON T1.process=T2.process 
WHERE T2.process is NULL OR T2.state<> T1.state 

SQL demo here

関連する問題