我有一张桌子
id | col1 | col3| col4
1 | x | r |
2 | y | m |
3 | z | p |
4 | x | r |
我必须更新此表的所有唯一行 即
id | col1 | col3| col4
1 | x | r | 1
2 | y | m | 1
3 | z | p | 1
4 | x | r | 0
我可以通过
获取唯一的行 select distinct col1,col2 from table
。但是如何识别这些行以便更新它们。请帮助。
答案 0 :(得分:4)
您可以使用group by来选择唯一结果:
SELECT MIN(ID) AS ID FROM TABLE GROUP BY COL1, COL3;
id | col1 | col3
1 | x | r
2 | y | m
3 | z | p
然后
UPDATE TABLE SET col4 = 1 WHERE ID IN (SELECT MIN(ID) FROM TABLE GROUP BY COL1, COL3);
限制是id
列应该是唯一的。
答案 1 :(得分:0)
如果它是一张足够小的桌子,这就是你可以做的事情
第1步:将所有内容更新为1
Update Table Set Col4 = 1
步骤2:将所有重复更新为0(OTTOMH)
Update Table
Set Col4 = 0
From
(
Select Col1, Min (Id) FirstId
From Table
Group By Col1
Having Count (*) > 1
) Duplicates
Where Table.Col1 = Duplicates.Col1
And Table.Id <> Duplicates.FirstId
答案 2 :(得分:0)
您也可以尝试:
UPDATE test
SET col4 = 1
WHERE id IN
(
SELECT t1.id
FROM table_name t1
LEFT JOIN table_name t2
ON t2.id < t1.id
AND t2.col1 = t1.col1
AND t2.col3 = t1.col3
WHERE t2.id IS NULL
)
答案 3 :(得分:0)
另一个稍微复杂的选项,即在一次点击中同时设置0
和1
值:
update my_table mt
set col4 = (
select case when rn = 1 then 1 else 0 end
from (
select id,
row_number() over (partition by col1, col3 order by id) as rn
from my_table) tt
where tt.id = mt.id);
4 rows updated.
select * from my_table order by id;
ID COL1 COL3 COL4
---------- ---- ---- ----------
1 x r 1
2 y m 1
3 z p 1
4 x r 0
这只是使用row_number()
决定哪个唯一组合是第一个,任意使用最低id
,指定值为1,其他一切为零。