didi / gendry

a golang library for sql builder
Apache License 2.0
1.6k stars 191 forks source link

请问下, BuildInsertOnDuplicate方法支持如下的sql吗? #122

Closed Hao6 closed 9 months ago

Hao6 commented 2 years ago

INSERT INTO table (a,b,c) VALUES (1,2,3),(4,5,6) ON DUPLICATE KEY UPDATE c=VALUES(c); 主要是不知道怎么构造BuildInsertOnDuplicate方法的第三个参数【update】?

caibirdme commented 2 years ago
data := []map[string]interface{}{
    {
        "name": "deen",
        "age":  23,
    },
    {
        "name": "Tony",
        "age":  30,
    },
}
update := map[string]interface{}{
    "role": "primaryschoolstudent",
    "rank": 5,
}
cond, vals, err := qb.BuildInsertOnDuplicate(table, data, update) 
db.Exec(cond, vals...)
Hao6 commented 2 years ago

这个例子是把data中2条数据的【role、rank】字段都更新为【"primaryschoolstudent"、5】吗?@caibirdme

【a,b】作为唯一索引的前提下,INSERT INTO table (a,b,c) VALUES (1,2,3),(4,5,6) ON DUPLICATE KEY UPDATE c=VALUES(c);的功能是:

执行该sql前,假设数据如下: | a | b | c | | 1 | 2 | -1 | | 4 | 5 | -1 |

执行该sql后,预期结果如下: | a | b | c | | 1 | 2 | 3 | | 4 | 5 | 6 |

即该语句会将不同行的【c】更新为不同的值。

twz915 commented 9 months ago

已经支持,可以关闭了