回答

收藏

更新和增加重复项上的多列

技术问答 技术问答 267 人阅读 | 0 人回复 | 2023-09-12

我有以下查询插入多个值,重复时需要更新列& J3 U! I2 M: I  P; I0 V+ j" ?
    INSERT INTO stock (price,stock1,stock2) VALUES  ON DUPLICATE KEY UPDATE    stock1 = COALESCE(stock1   VALUES(stock1),stock1),  `stock1-C` = `stock1-C`   (VALUES(stock1) IS NOT NULL), stock2 = COALESCE(stock2   VALUES(stock2),stock2),  `stock2-C` = `stock2-C`   (VALUES(stock2) IS NOT NULL)这个查询应该是( )    现有值添加为新值,并以1递增现有 列C的    值,让我试着用一些例子来解释) d. h! `7 W" Y9 \) G' k: i
以下是默认表,包括 price    是唯一一列,其余列默认值为0  / V) @: B; ^* {- u( ^! s
[table][tr][td]价格[/td][td]库存1[/td][td]股票1-C[/td][td]库存2[/td][td]股票2-C以下值将创建类似的行
: C# K" d' r  x) r/ _(99,10,0)[table][tr][td]价格[/td][td]库存1[/td][td]股票1-C[/td][td]库存2[/td][td]股票2-C[/td][/tr][tr][td]99[/td][td]10[/td][td]0[/td][td]0[/td][td]0[/td][/tr][tr][td]120[/td][td]0[/td][td]0[/td][td]12[/td][td]0同一值再次运行,应在 列中    添加新值,并在 列C中    增加列
: c" Z7 j+ G0 A4 x) }# S(99,10,0)[table][tr][td]价格[/td][td]库存1[/td][td]股票1-C[/td][td]库存2[/td][td]股票2-C[/td][/tr][tr][td]99[/td][td]20[/td][td]1个[/td][td]0[/td][td]0[/td][/tr][tr][td]120[/td][td]0[/td][td]0[/td][td]24[/td][td]1个预期结果    :+ W8 ^9 T6 B- K& v
以上两个查询对我的代码来说是完美的在让我们试着插入重复的价格
0 d2 v$ n+ n1 p+ J1 \, z- {5 v(150,55,0)因为价格不是150,应该给:  ( k7 [! d3 q9 n' n1 f
[table][tr][td]价格[/td][td]库存1[/td][td]股票1-C[/td][td]库存2[/td][td]股票2-C[/td][/tr][tr][td]99[/td][td]20[/td][td]1个[/td][td]0[/td][td]0[/td][/tr][tr][td]120[/td][td]0[/td][td]0[/td][td]24[/td][td]1个[/td][/tr][tr][td]150[/td][td]55[/td][td]0[/td][td]56[/td][td]0应更新如下:
" q+ S0 ^, g" u/ N% ]: D4 p    [table][tr][td]价格[/td][td]库存1[/td][td]股票1-C[/td][td]库存2[/td][td]股票2-C[/td][/tr][tr][td]99[/td][td]20[/td][td]1个[/td][td]0[/td][td]0[/td][/tr][tr][td]120[/td][td]0[/td][td]0[/td][td]24[/td][td]1个[/td][/tr][tr][td]150[/td][td]65岁[/td][td]1个[/td][td]66[/td][td]1个实际结果 :+ _3 G. x0 ?( [( V
但第一行更新为1,下行更新为3
3 U: ?& O' F0 J5 P: {5 ~* X3 j+ O(‘150’,‘55’,0),(‘150’,0,‘56’)  5 o' v) {2 j1 c- ^
[table][tr][td]价格[/td][td]库存1[/td][td]股票1-C[/td][td]库存2[/td][td]股票2-C[/td][/tr][tr][td]99[/td][td]20[/td][td]1个[/td][td]0[/td][td]0[/td][/tr][tr][td]120[/td][td]0[/td][td]0[/td][td]24[/td][td]1个[/td][/tr][tr][td]150[/td][td]55[/td][td]1个[/td][td]56[/td][td]1个第二次跑步的时候会有这种感觉。
( r- z; s% W+ [( Q$ [1 D/ A(‘150’,‘55’,0),(‘150’,0,‘56’)  
/ t* t" `  f3 @5 z& d- l7 s[table][tr][td]价格[/td][td]库存1[/td][td]股票1-C[/td][td]库存2[/td][td]股票2-C[/td][/tr][tr][td]99[/td][td]20[/td][td]1个[/td][td]0[/td][td]0[/td][/tr][tr][td]120[/td][td]0[/td][td]0[/td][td]24[/td][td]1个[/td][/tr][tr][td]150[/td][td]55[/td][td]3[/td][td]56[/td][td]3如果我在多个查询中这样做,效果会很好
5 y% _; Z; g# Y: g$ w/ \INSERT INTO `bankvolume` (`price`,`stock1`) VALUES (100,10) ON DUPLICATE KEY UPDATE `stock1` = COALESCE(`stock1`   VALUES(`stock1`),`stock1`),  `stock1-C` = `stock1-C`   (VALUES(`stock1`) IS NOT NULL);INSERT INTO `bankvolume` (`price`,`stock2`) VALUES (100,10) ON DUPLICATE KEY UPDATE `stock2` = COALESCE(`stock2`   VALUES(`stock2`),`stock2`),  `stock2-C` = `stock2-C`   (VALUES(`stock2`) IS NOT NULL);我想把两者合并成一个,
3 n: J8 D' o* }# H! h" [附:我想在一次查询中更新50多只股票。这就是为什么我试图优化我的代码。非常感谢。) u" C% Y$ O3 a- X1 t4 I* G
                                                               
; _: c5 ?( G$ T0 d2 k" v    解决方案:
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则