如果满足条件,则更新 sql server 表中的第一行

Kem*_*min 3 t-sql sql-server

我有一个包含以下行的表。

tbl图片

  • 身份证号
  • 图片名称
  • 画廊ID
  • 活跃

我想运行一个查询来选择例如所有带有galleryID=3和的图片isActive=1

如果此选择中没有图片且 isActive 行为 1(换句话说,查询不返回任何结果)我想isActive=1galleryID=3

任何人都可以指导我吗?

Jim*_*Jim 5

干得好。基本上,它会检查该集中是否有任何活动记录,如果没有,则更新第一个(由 picID 确定)。如果愿意,您可以将其粘贴在存储过程或函数中,或者仅运行脚本并手动更改图库 ID。

DECLARE @Count INT,
@GalleryID INT

SET @GalleryID = 3

SELECT @Count = COUNT(*)
FROM tblPictures
WHERE galleryID=@GalleryID and isActive=1

IF @Count = 0
BEGIN

UPDATE tblPictures
SET isActive = 1
WHERE picID = (
    SELECT TOP 1 picID 
    FROM tblPictures 
    WHERE galleryID = @GalleryID 
    ORDER BY picID
    )

END
Run Code Online (Sandbox Code Playgroud)

摩尔代码

这应该更新没有活动图片的任何图库中的第一张图片(通过 picID):

UPDATE tblPictures
SET isActive = 1
WHERE picID IN (
    SELECT picID 
    FROM (
        SELECT galleryID, MIN(picID) AS 'picID'
        FROM tblPictures AS p
        JOIN (
            SELECT galleryID 
            FROM tblPictures 
            WHERE isActive = 1
            ) AS s ON p.galleryID <> s.galleryID
        GROUP BY galleryID
        )
    )
Run Code Online (Sandbox Code Playgroud)

最里面的子查询查找确实有活动图片的画廊。下一步查找不包括有图片的画廊 ID。然后我们为每个 galleryID 找到最低的 picID 并使用它们来更新表。