如何使用mysql更新同一个表中的值?
我需要根据每个客户id的附件id替换/更新表中的值。 该表如下所示:如何使用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 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这是你需要的吗?