我有两列:
ID name
--------------
NULL Bose
NULL Bose
NULL Computer
NULL Bose
NULL Monitor
NULL Monitor
NULL Computer
NULL Bose
NULL Phone
NULL Computer
需要添加如下的唯一值: 值应该从400这样的数字开始。
ID name
------------
400 Bose
400 Bose
401 Computer
400 Bose
402 Monitor
402 Monitor
401 Computer
400 Bose
403 Phone
401 Computer
我曾尝试使用DISTINCT,但无法弄清楚,有人可以帮忙吗?谢谢!
答案 0 :(得分:0)
您可以通过各种方式执行此操作。一种方法是使用变量。
update table t cross join
(select @name := '',@prevname := '', @id := 399) const
set id = (case when (@prevname := @name) is null then null
when (@name := name) is null then null
when @prevname = name then @id
else @id := @id + 1
end)
order by name;
使用case
语句只是为了允许update
子句中的变量赋值。
答案 1 :(得分:0)
我认为首先你必须为上面制作主表: 然后根据尊重PK-FK关系的名称更新外包密钥(ID)。
答案 2 :(得分:0)
试试这个:
UPDATE your_table s
JOIN
(SELECT (@r:=@r+1) rn, t.name FROM
(SELECT DISTINCT name FROM your_table) t
,(SELECT @r:=399) nums) tab
ON tab.name = s.name
SET s.ID = tab.rn;
以下是SQL Fiddle的工作代码:http://www.sqlfiddle.com/#!2/b831ed/1