表格:
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结果进行更新或插入?
最好是在单个命令中执行此操作,而不使用触发器?
答案 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);