保持和仅更新TYPE = 3的一行的方法

时间:2018-02-24 00:09:45

标签: mysql sql

表格:

ID    TYPE    USER_ID
======================
1     1       15
2     1       15
.     3       15
.     1       15
.

应保留多个USER_ID,其中TYPE = 1但 only 0或1行,其中TYPE = 3。 在TYPE = 3的情况下,在插入时我需要更新或创建(很像insert on duplicate key update)该行。 有没有一种好的方法可以在没有SELECT的情况下完成此任务,并根据程序中的SELECT结果进行更新或插入? 最好是在单个命令中执行此操作,而不使用触发器?

1 个答案:

答案 0 :(得分:0)

您可以使用子查询进行更新。在这种情况下,由于您希望读取和写入相同的元组,因此需要在同一个表上重命名子查询以擦除该元组上的锁定。

假设您要更新type = 3 to的第一行数据的user_id 20做:

UPDATE tbl SET user_id=20 WHERE id=
(SELECT A.id FROM (SELECT MIN(id) id
FROM tbl 
WHERE type=3) A);

请参阅http://localhost/ORCA/api/ORCA/asset/8Z5324J