1

我有这个查询:

INSERT INTO user_list (USER_ID,USERNAME,NAME,ACTIVITY,PRIVATE)
VALUES(?,?,?,1,?) 
ON DUPLICATE KEY UPDATE USERNAME=?, NAME=?, ACTIVITY=ACTIVITY+1,PRIVATE=?

PRIVATE 可以是 0 也可以是 1。我需要根据一个参数来插入,但是如果 PRIVATE 在该行已经是 1,就不应该设置为 0。

基本上如果它变成1,它永远不会变成0

如何在单个查询中执行此操作?

4

3 回答 3

1

您可以设置列的值PRIVATE

PRIVATE = PRIVATE OR VALUES(PRIVATE)

如果这是原始值,它将保留该1值,或者如果原始值是,则将其更改为新值0

INSERT INTO user_list (USER_ID, USERNAME, NAME, ACTIVITY, PRIVATE)
VALUES(?, ?, ?, 1, ?) 
ON DUPLICATE KEY UPDATE USERNAME = VALUES(USERNAME), 
                        NAME = VALUES(NAME), 
                        ACTIVITY = ACTIVITY + 1, 
                        PRIVATE = PRIVATE OR VALUES(PRIVATE)
于 2021-01-29T16:04:52.410 回答
0

嗯。. . 为什么要改变价值?

INSERT INTO user_list (USER_ID, USERNAME, NAME, ACTIVITY, PRIVATE) 
    VALUES(?, ?, ?, 1, ?)
    ON DUPLICATE KEY UPDATE USERNAME=?, NAME=?, ACTIVITY=ACTIVITY+1;

另外,你知道VALUES()吗?

INSERT INTO user_list (USER_ID, USERNAME, NAME, ACTIVITY, PRIVATE) 
    VALUES(?, ?, ?, 1, ?)
    ON DUPLICATE KEY UPDATE USERNAME = VALUES(USERNAME),
                            NAME = VALUES(NAME),
                            ACTIVITY = ACTIVITY + 1;

这会将传入的值分配给这些列。

于 2021-01-29T15:22:10.363 回答
0

用例确定 private 是否应保持原样,如果是,则用 self 覆盖。

insert into user_list(id,name,privacy)
values
(1,'aaa','0')
on duplicate key 
update name = values(name)
        ,
         privacy = case when privacy = 0 then values(privacy)
                              when privacy = 1 then privacy
                        end
;
于 2021-01-29T15:50:45.270 回答