2016-05-10 8 views
0

これはクエリ前に私のテーブルがどのように見えるかです。1つのmysqlクエリで複数の条件または条件を持つ複数のフィールドまたはカラムを一括またはバッチ更新するには

cid | purl  | purl_full 
---------------------------- 
2050 | dingo  | http://dingo.domain.com 
2050 | wombat | http://wombat.domain.com 
2050 | platypus | http://platypus.domain.com 
2050 | koala  | http://koala.domain.com 
2050 | dingo1 | http://dingo1.domain.com 
2050 | wombat1 | http://wombat1.domain.com 
2050 | platypus1 | http://platypus1.domain.com 
2050 | koala1 | http://koala1.domain.com 
2050 | dingo  | tempurl 
2050 | wombat | tempurl 
2050 | platypus | tempurl 
2050 | koala  | tempurl 

これは、クエリの後に表示されます。

cid | purl  | purl_full 
---------------------------- 
2050 | dingo  | http://dingo.domain.com 
2050 | wombat | http://wombat.domain.com 
2050 | platypus | http://platypus.domain.com 
2050 | koala  | http://koala.domain.com 
2050 | dingo1 | http://dingo1.domain.com 
2050 | wombat1 | http://wombat1.domain.com 
2050 | platypus1 | http://platypus1.domain.com 
2050 | koala1 | http://koala1.domain.com 
2050 | dingo2 | http://dingo2.domain.com 
2050 | wombat2 | http://wombat2.domain.com 
2050 | platypus2 | http://platypus2.domain.com 
2050 | koala2 | http://koala2.domain.com 

これは、クエリの後に似ています。

cid | purl  | purl_full 
---------------------------- 
2050 | dingo  | http://dingo.domain.com 
2050 | wombat | http://wombat.domain.com 
2050 | platypus | http://platypus.domain.com 
2050 | koala  | http://koala.domain.com 
2050 | dingo1 | http://dingo1.domain.com 
2050 | wombat1 | http://wombat1.domain.com 
2050 | platypus1 | http://platypus1.domain.com 
2050 | koala1 | http://koala1.domain.com 
2050 | dingo2 | 
2050 | wombat2 | 
2050 | platypus2 | 
2050 | koala2 | 

ここでは私が使用しているクエリです。

UPDATE localhost_campaigns.list_data SET 
purl = (CASE 
WHEN (purl = 'dingo' AND purl_full = 'tempurl' AND cid = 2050) THEN 'dingo2' 
WHEN (purl = 'wombat' AND purl_full = 'tempurl' AND cid = 2050) THEN 'wombat2' 
WHEN (purl = 'platypus' AND purl_full = 'tempurl' AND cid = 2050) THEN 'platypus2' 
WHEN (purl = 'koala' AND purl_full = 'tempurl' AND cid = 2050) THEN 'koala2' 
END), 
purl_full = (CASE 
WHEN (purl = 'dingo' AND purl_full = 'tempurl' AND cid = 2050) THEN 'http://dingo2.domain.com' 
WHEN (purl = 'wombat' AND purl_full = 'tempurl' AND cid = 2050) THEN 'http://wombat2.domain.com' 
WHEN (purl = 'platypus' AND purl_full = 'tempurl' AND cid = 2050) THEN 'http://platypus2.domain.com' 
WHEN (purl = 'koala' AND purl_full = 'tempurl' AND cid = 2050) THEN 'http://koala2.domain.com' 
END) 
WHERE (purl IN ('dingo', 'wombat', 'platypus', 'koala') AND purl_full = 'tempurl' AND cid = 2050); 

したがって、1つのフィールドは更新されますが、他のフィールドは更新されません。何らかの理由で2番目のフィールドを空白にします。

これはさらに悪くなる。

UPDATE localhost_campaigns.list_data SET 
purl = CASE 
WHEN (purl = 'dingo' AND purl_full = 'tempurl' AND cid = 2050) THEN 'dingo2' 
WHEN (purl = 'wombat' AND purl_full = 'tempurl' AND cid = 2050) THEN 'wombat2' 
WHEN (purl = 'platypus' AND purl_full = 'tempurl' AND cid = 2050) THEN 'platypus2' 
WHEN (purl = 'koala' AND purl_full = 'tempurl' AND cid = 2050) THEN 'koala2' 
END, 
purl_full = CASE 
WHEN (purl = 'dingo' AND purl_full = 'tempurl' AND cid = 2050) THEN 'http://dingo2.domain.com' 
WHEN (purl = 'wombat' AND purl_full = 'tempurl' AND cid = 2050) THEN 'http://wombat2.domain.com' 
WHEN (purl = 'platypus' AND purl_full = 'tempurl' AND cid = 2050) THEN 'http://platypus2.domain.com' 
WHEN (purl = 'koala' AND purl_full = 'tempurl' AND cid = 2050) THEN 'http://koala2.domain.com' 
END; 

も(再びそれが唯一の裏編みを更新しますが、purl_fullない、というかむしろそれを更新しますが、それを作る、これを試してみました(PURL固有の名前を作成する)動作しませんでした空):

UPDATE localhost_campaigns.list_data 
SET purl = CASE purl 
WHEN 'temp_dingo' THEN 'dingo' 
WHEN 'temp_wombat' THEN 'wombat' 
WHEN 'temp_platypus' THEN 'platypus' 
WHEN 'temp_koala' THEN 'koala' 
END, 
purl_full = CASE purl 
WHEN 'temp_dingo' THEN 'http://dingo.domain.com' 
WHEN 'temp_wombat' THEN 'http://wombat.domain.com' 
WHEN 'temp_platypus' THEN 'http://platypus.domain.com' 
WHEN 'temp_koala' THEN 'http://koala.domain.com' 
END 
WHERE (purl IN ('temp_dingo', 'temp_wombat', 'temp_platypus', 'temp_koala') AND cid = 2050); 

これはどうやって更新しますか?列1のすべてを実行した後に列2を実行するか、または同時に両方の列を実行して、次のレコードに移動して、同時に両方の列を実行しますか?

答えて

0

ここで、何がうまくいったのですか。私は、元の名前ではなく、変更していたものに2番目のSET CASEの名前を変更する必要がありました。そのような答えは、それが一度に一度に列に並んでいるのか列に列挙されているのかという疑問があります。

UPDATE localhost_campaigns.list_data 
SET purl = CASE purl 
WHEN 'temp_dingo' THEN 'dingo' 
WHEN 'temp_wombat' THEN 'wombat' 
WHEN 'temp_platypus' THEN 'platypus' 
WHEN 'temp_koala' THEN 'koala' 
END, 
purl_full = CASE purl 
WHEN 'dingo' THEN 'http://dingo.domain.com' 
WHEN 'wombat' THEN 'http://wombat.domain.com' 
WHEN 'platypus' THEN 'http://platypus.domain.com' 
WHEN 'koala' THEN 'http://koala.domain.com' 
END 
WHERE (purl IN ('temp_dingo', 'temp_wombat', 'temp_platypus', 'temp_koala') AND cid = 2050); 
関連する問題