Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用mysql更新同一个表中的值?_Mysql_Sql - Fatal编程技术网

如何使用mysql更新同一个表中的值?

如何使用mysql更新同一个表中的值?,mysql,sql,Mysql,Sql,我需要根据每个客户id的附件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的附件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

首先,删除att_id=30的值

updatetablename SET value=”“,其中att_id=30

然后设置att_id=40的值


更新tablename SET value=“12345”,其中att_id=40

首先,删除att_id=30的值

updatetablename SET value=”“,其中att_id=30

然后设置att_id=40的值


更新tablename SET value=“12345”,其中att_id=40

更新:根据您的评论…我需要找到属性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]+$'
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
您可能需要调整regexp以正确匹配您的记录(“移动电话号码”)

这里是演示


从您的描述很难确定,但如果您需要交换每个客户id的
att\u id
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]+$'
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
这里是演示

或者,如果您需要将
att_id=30
的值放入
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 

这里是演示:根据您的评论…我需要找到属性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]+$'
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
您可能需要调整regexp以正确匹配您的记录(“移动电话号码”)

这里是演示


从您的描述很难确定,但如果您需要交换每个客户id的
att\u id
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]+$'
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
这里是演示

或者,如果您需要将
att_id=30
的值放入
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 

这里是演示

这里是一种交换
附件id
等于30和40的行上的值的一般方法:

update t join
       t t30
       on t.customer_Id = t30.customer_Id and t30.att_id = 30 join
       t t40
       on t.customer_Id = t40.customer_Id and t40.att_id = 40 join
    set t.value = (case when att_id = 30 then t40.value 
                        when att_id = 40 then t30.value 
                        else t.value
                   end)
    where att_id in (30, 40);

以下是交换
att_id
等于30和40的行上的值的一般方法:

update t join
       t t30
       on t.customer_Id = t30.customer_Id and t30.att_id = 30 join
       t t40
       on t.customer_Id = t40.customer_Id and t40.att_id = 40 join
    set t.value = (case when att_id = 30 then t40.value 
                        when att_id = 40 then t30.value 
                        else t.value
                   end)
    where att_id in (30, 40);
这是命令。有关更新的教程,请参阅



这是命令。有关更新的教程,请参见。

您到目前为止写了什么?您能用文字描述一下,您正在尝试做什么吗?我需要找到属性30的值,检查它们是否是手机号码,如果是真的,则将其写入属性40。您到目前为止写了什么?您能用文字描述一下吗,你想做什么?我需要找到属性30的值,检查它们是否是移动电话号码,如果是真的,写它。属性40没有值。实际上值可以不同于“12345”。实际上值可以不同于“12345”,但这并不能真正完成删除任务。@MadanRam抱歉,删除什么?我的意思是你应该删除ID=2的值。@MadanRam这取决于OP。这部分的问题不清楚。@Alex这是你需要的吗?但这并不能真正完成删除的工作。@MadanRam抱歉,删除什么?我的意思是你应该删除ID=2的值。@MadanRam,这取决于OP。这部分的问题不清楚。@Alex这是你需要的吗?