Mysql
UPDATE SET N + 1 等於一行(有迭代)
問題:對於 b3 列中的每個值,您將如何迭代先前的結果(如下所示)?
MariaDB Fiddle(這包括解決上一個問題的先前小提琴資訊):https ://dbfiddle.uk/?rdbms=mariadb_10.5&fiddle=222f694a36cc41131fe558438e1d6ccd
注意:這是此處引用的問題的延續: 更新 SET N + 1 等於一行
在增加 1 個複雜維度時請求解決方案。
輸入表:3列(每個b3迭代)
b1 b2 b3 1 X P1 2 Z P1 3 X P1 4 Y P1 5 Z P1 6 X P1 7 Y P1 8 X P2 9 Z P3 10 X P3 11 Z P3 12 X P3 13 Z P2 14 Z P3
期望的結果:3 列(每個 b3 的迭代)
b1 b2 b3 1 X P1 2 Y P1 3 X P1 4 Y P1 5 Z P1 6 X P1 7 Y P1 8 X P2 9 Z P3 10 X P3 11 Y P3 12 X P3 13 Y P2 14 Y P3
對此數據進行簡單迭代以供參考:
– 此程式碼遞增計數,然後迭代 b3 的每個值
– 然後將結果值設置為 b2。UPDATE b JOIN( SELECT b1, row_number() over (partition by b3 order by b1) rn FROM b) n on n.b1 = b.b1 SET b2 = rn;
您可以輕鬆地將我的解決方案從上一個答案擴展為:
update b set b2 = 'Y' where exists ( select 1 from ( select b1, b2, lag(b2) over (partition by b3 order by b1) as lag_b2 from b ) as t where t.b2 = 'Z' and t.lag_b2 = 'X' and t.b1 = b.b1 ); select * from b order by b1;
僅考慮同一組 b3 中的行