0

各 customer_id の att_id に従って、テーブルの値を置換/更新する必要があります。テーブルは次のようになります。

ID att_id customer_id value
1  5            1     name
2  30           1     12345
3  40           1      
4  5            2     name2
5  30           2     12345
6  40           2     

次のように置き換えたいと思います。

ID att_id customer_id value
1  5            1     name
2  30           1     
3  40           1     12345 
4  5            2     name2
5  30           2     
6  40           2     12345
4

4 に答える 4

3

更新: あなたのコメントに基づいて...属性 30 の値を見つけて、それらが携帯電話番号かどうかを確認し、それが真の場合は、属性 40 の値にそれを書き込む必要があります...クエリは次のようになります

UPDATE table1 t1 JOIN table1 t2
    ON t1.customer_id = t2.customer_id
   AND t1.att_id = 40 
   AND t2.att_id = 30
   SET t1.value = t2.value
  --  ,t2.value = NULL -- uncomment if you need to clear values in att_id = 30 at the same time
 WHERE t2.value REGEXP '^[+]?[0-9]+$'

レコード (「携帯電話番号」) と適切に一致するように正規表現を微調整する必要がある場合があります

これがSQLFiddleのデモです


あなたの説明から確実に伝えるのは難しいですが、の値を交換する必要がある場合はatt_id 3040customer_id ごとに次のようにすることができます

UPDATE table1 t1 JOIN table1 t2
    ON t1.customer_id = t2.customer_id
   AND t1.att_id = 40 
   AND t2.att_id = 30
   SET t1.value = t2.value,
       t2.value = t1.value

これがSQLFiddleのデモです

att_id = 30または、 toの値att_id = 40と「クリア」値を入力する必要がある場合att_id = 30

UPDATE table1 t1 JOIN table1 t2
    ON t1.customer_id = t2.customer_id
   AND t1.att_id = 40 
   AND t2.att_id = 30
   SET t1.value = t2.value,
       t2.value = NULL 

これがSQLFiddleのデモです

于 2013-08-12T11:16:58.180 に答える