我目前与用户和个人资料图片存在一对多的关系,我需要将其更改为一对一的关系。
我有一个Users表,然后是一个具有UserID的ImageReference表。
我需要做的是每个拥有多个关联ImageReference记录的用户,删除所有ImageReference记录,除了最近的记录。
因此,如果用户有两个图像引用,一个ID为100,另一个ID为150,我需要删除ID为100的图像。
有关最佳方法的任何想法吗?
答案 0 :(得分:0)
插入所有最新的ImageReference行(按用户ID选择最大ID分组)到临时表中,然后将该表连接到ImageReference表上,删除那些不连接的行(其中ImageReference.ID为null) 。
答案 1 :(得分:0)
你有没有试过像
这样的东西SELECT UserID,
MAX(ImageRefID) LastUserImageID
FROM UserImages
GROUP BY UserID
如果要将此架构更改为1-1,则应该在Users表中包含ImageRedID。
使用Sql Server 2005,您也可以直接从表中删除它们。
看看下面的例子。
DECLARE @UserImages TABLE(
ImageRefID INT,
UserID INT
)
INSERT INTO @UserImages SELECT 1, 1
INSERT INTO @UserImages SELECT 2, 2
INSERT INTO @UserImages SELECT 3, 1
INSERT INTO @UserImages SELECT 4, 1
;WITH Vals AS (
SELECT UserID,
ImageRefID,
ROW_NUMBER() OVER(PARTITION BY UserID ORDER BY ImageRefID DESC) RowID
FROM @UserImages
)
DELETE
FROM Vals
WHERE RowID > 1
SELECT *
FROM @UserImages
答案 2 :(得分:0)
delete from ImageReference where ImgID in (
select ImgID
from ImageReference ir
join (select UserID, max(ImgID) as MaxImgID
from ImageReference
group by UserID) MaxImgIDPerUser
on ir.UserID = MaxImgIDPerUser.UserID
where ir.ImgID < MaxImgIDPerUser.MaxImgID)