Mysql

UPDATE SET N + 1 等於一行(有迭代)

  • June 18, 2021

問題:對於 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 中的行

引用自:https://dba.stackexchange.com/questions/294481