2016-07-02 11 views
1

私は現在この問題を抱えています。私は単一のSQLクエリで複数のレコードを更新したい。このポストにも私のテーブルのビジュアルが含まれています。複数のデータベースレコードを1つのクエリで更新する(条件付き更新クエリを使用)、列の値は同じでIDは異なる

これは、これは私の現在のSQLステートメントである

+----------+------------+------------+ 
| item_ID | meta_name | meta_value | 
+----------+------------+------------+ 
| VwhDB0zs | item_price | 25.00  | 
| tPmg309L | item_price | 25.00  | 
+----------+------------+------------+ 

私のテーブルです:私は補完されている値と同じ値(ITEM_PRICE)を持つレコードを更新したい

UPDATE pt_item_meta 
SET meta_value = CASE meta_name 
    WHEN 'item_price' THEN '251.00' 
    WHEN 'item_price' THEN '325.20' 
ELSE meta_value END 
WHERE item_ID IN('tPmg3O9L','VwhDBOzS') 

それぞれのID。

しかし、この問合せは、meta_name = item_priceのすべてのレコードを251.00に更新します。

私の目標は次のとおりです。

  1. 251.00が
  2. 325.20はID VwhDB0zS

私は達成しなかったとのアイテムの新しいITEM_PRICEあるべきID tPmg309Lでアイテムの新しいITEM_PRICEする必要があります私の目標。だから私はこのクエリがこの特定の状況に対する解決策ではないという結論に達しました。

もっと良い解決策はありますか?事前に感謝:)

答えて

0
UPDATE pt_item_meta 
SET meta_value = CASE 
    WHEN item_ID='tPmg3O9L'THEN '251.00' 
    WHEN item_ID= 'VwhDBOzS' THEN '325.20' END 
WHERE item_ID IN('tPmg3O9L','VwhDBOzS'); 

は、検索フォームに簡単なフォームからケース式この

1

の変更を試してみて、item_IDのための条件を追加します。

UPDATE pt_item_meta 
SET meta_value = 
CASE 
    WHEN meta_name = 'item_price' AND item_ID = 'tPmg3O9L' THEN '251.00' 
    WHEN meta_name = 'item_price' AND item_ID = 'VwhDBOzS' THEN '325.20' 
END 
WHERE item_ID IN('tPmg3O9L','VwhDBOzS') 

それともあなたはそれを書き換えることができこのように:

UPDATE pt_item_meta 
SET meta_value = 
    CASE item_ID 
    WHEN 'tPmg3O9L' THEN '251.00' 
    WHEN 'VwhDBOzS' THEN '325.20' 
    END 
WHERE item_ID IN ('tPmg3O9L','VwhDBOzS') 
    AND meta_name = 'item_price' 

どちらの場合でも重要なことは、両方の条件を満たしている(item_IDとmeta_name)。また、フィルターに使用される述部は、意図した以外の行が更新されないようにするため、elseブランチは不要です。