我遇到的问题是我有一个名为Group
的表和一个名为Entry
的表。 Group
表有一个主键Id
。 Entry
表包含一个主键Id
,即Group
表的Id
的外键GroupId
。 Entry
表还有一列Weight
。这个Weight
是一个整数,它只是告诉我在顶部显示零的排序权重。
基本上发生的事情是,有人在设计数据库时使这个Weight
字段可以为空。现在我需要调整Weight
以适应我们打算将UNIQUE
约束UNQIUE(GroupId, Weight)
添加到Entry
表中。这可以防止两个Entry
条目在它们基本处于同一组时具有相同的排序权重。
什么查询可以让我浏览所有现有数据,只需逐个编号分组每个条目的Weight
列,从0到N,其中N是{{1}的数量Entry
中的条目?我想根据Group
的{{1}}设置权重,以便给定Id
中Entry
的最低Id
获得最低Entry
Group
1}}。
我想要一个大的ol'查询将通过Weight
表,加入所有Group
条目,然后迭代它们并分配序列。但是,我不知道从哪里开始。
答案 0 :(得分:1)
基本上你会使用MS SQL Over Clause
这是sqlfiddle sample to show you how to do it in one query
希望这有帮助。
CREATE TABLE Entry (Id INT PRIMARY KEY, GroupId INT, Weight INT);
CREATE TABLE [Group] (Id INT PRIMARY KEY, Label VARCHAR(10));
INSERT [Group] (Id, Label)
VALUES(1, 'test');
INSERT Entry (Id, GroupId, Weight)
VALUES(1,1, null)
INSERT Entry (Id, GroupId, Weight)
VALUES(2,1, null)
INSERT Entry (Id, GroupId, Weight)
VALUES(3,1, null)
UPDATE E
SET E.WEIGHT = o.WEIGHTIS
--SELECT *
FROM Entry E
INNER JOIN (
SELECT G.Id GID, E.Id EID,
ROW_NUMBER() OVER(PARTITION BY G.Id ORDER BY E.ID) WeightIs
FROM [Group] G
INNER JOIN Entry E
ON G.Id = E.GroupId
) o
ON o.GID = E.GroupID AND o.EID = E.Id