我有一张这样的桌子。
ID Name Source ID 1 Orange 0 2 Pear 0 3 Apple 0 4 Orange 0 5 Apple 0 6 Banana 0 7 Orange 0
我想做的是:
因此,该表应更新如下:
ID Name Source ID 1 Orange 1 2 Pear 2 3 Apple 3 4 Orange 1 5 Apple 3 6 Banana 6 7 Orange 1
我怎样才能在SQL中做到这一点(特别是Oracle,但我对General SQL也很好)...
谢谢!
答案 0 :(得分:1)
UPDATE MyTable
SET SourceID = Sub.ID
FROM MyTable
INNER JOIN (SELECT MIN(ID) as ID, Name FROM MyTable GROUP BY Name) Sub
ON Sub.Name = MyTable.Name
只需使用一个子查询,列出每个名称的最小ID。
答案 1 :(得分:1)
由于ID
正在增加自动增量值(对吗?),FirstID可以计算为MIN(ID)
:
UPDATE fruits
SET SourceID = ag.ID
FROM fruits f
INNER JOIN
(
SELECT MIN(ID) as ID, Name FROM @fruits
GROUP BY Name
) ag
ON ag.Name = f.Name
答案 2 :(得分:1)
这样的事情可以让你得到你想要的东西:
update table a
set source_id = (
select min(id)
from table b
where b.name = a.name
);