2016-10-17 16 views
-1

私はこれを実行するように努力していますが(私を理解するまでにかかっていましたが)、私は仕事の更新とブランクアウトのためのネストされたクエリが必要です。すべてのヒント/アドバイスは非常に高く評価されます。ネストされたクエリの更新

update `deal_change_log` 
set new_value = 'Paying' and old_value = 'Null' 
where id in (select item_id from deal_change_log 
      where field_key = '458a901560dc06efb78fe365b951dacd3a6a1a11' 
      and `old_value` = 'billing details entered' 
      and `new_value` = 'paying' 
      and item_id not in (select item_id from `deal_change_log` d2 where d2.`field_key` = '458a901560dc06efb78fe365b951dacd3a6a1a11' 
      and d2.`log_time` > `log_time`) 
order by item_id); 
+1

追加/タグDBMSサーバー –

+0

共有いくつかのサンプルデータ、 – Pirate

+0

は保管しないでくださいNULLの場合はテキストNULL、つまり 'old_value = Null'を実行します。 – jarlh

答えて

0

使用エイリアス、実行が遅いことができますので、

update `deal_change_log` 
set new_value = 'Paying' and old_value = 'Null' 
where id in (select item_id from deal_change_log d1 
      where d1.field_key = '458a901560dc06efb78fe365b951dacd3a6a1a11' 
      and d1.`old_value` = 'billing details entered' 
      and d1.`new_value` = 'paying' 
      and d1.item_id not in (select item_id from `deal_change_log` d2 where d2.`field_key` = '458a901560dc06efb78fe365b951dacd3a6a1a11' 
      and d2.`log_time` > d1.`log_time`) 
order by d1.item_id); 
+0

何も動いていません - 'あなたはFROM句の更新のために'ターゲットテーブル 'deal_change_log'を指定できません。私はMySQLのバージョン5.6を実行しています。 – b0uncyfr0

0

避けは、サブクエリを使用します。

declare @item_id2 varchar(100) 
    select @item_id2 =item_id from `deal_change_log` d2 
      where d2.`field_key` = '458a901560dc06efb78fe365b951dacd3a6a1a11' 
     and d2.`log_time` > `log_time`) order by item_id 
    declare @item_id varchar(100) 
    select @item_id= item_id from deal_change_log 
     where field_key = '458a901560dc06efb78fe365b951dacd3a6a1a11' 
     and `old_value` = 'billing details entered' 
     and `new_value` = 'paying' 
     and item_id not in (@item_id2) 

    update `deal_change_log` 
    set new_value = 'Paying' and old_value = 'Null' 
    where id in (@item_id) ; 
関連する問題