我正在尝试更新同一个表上带有select的行。在我的例子中,如果行的值在同一列中出现不止一个,我希望用0更新状态。
例如,item1出现了三次,这就是为什么我想将2的值更改为另一个状态为0的item1。
到目前为止,我已经尝试了我的代码,但我仍然在为预期的结果而奋斗。
select * from (
UPDATE table_1 t1
SET STATUS = 0 where exists (
select t1.*, lag(ITEM, 1, 0) over (order by ITEM_1 ASC) as C2
from table_1 AS t1)
WHERE ITEM_1 = C2)
#|ID| ITEM_1 |STATUS
-+--+---------+------
1|10| item1 | 1
2|11| item1 | 1
3|12| item1 | 1
4| 7| item2 | 1
5| 2| item3 | 1
6| 9| item3 | 1
7|13| item3 | 1
8|14| item3 | 1
预期结果。
#|ID| ITEM_1 |STATUS|C2
-+--+---------+------+---------
1|10| item1 | 1 | 0
2|11| item1 | 0 | item1
3|12| item1 | 0 | item1
4| 7| item2 | 1 | item1
5| 2| item3 | 1 | item2
6| 9| item3 | 0 | item3
7|13| item3 | 0 | item3
8|14| item3 | 0 | item3
1条答案
按热度按时间44u64gxh1#
| 识别号|项目_1|状态|
| - ------|- ------|- ------|
| 十个|项目1| 1个|
| 十一|项目1|无|
| 十二|项目1|无|
| 七|项目2| 1个|
| 第二章|项目3| 1个|
| 九|项目3|无|
| 十三|项目3|无|
| 十四|项目3|无|
fiddle