我正在处理图像表。我需要确保每个玩家都有一个主映像,如果他有一个以上的映像。在下面的示例数据集中,这会将myimage.jpg或hisimage.jpg的primary更新为1,而仅将y1image.jpg的primary更新为1。

Table:  Images

Playerid - 16
Image  - myimage.jpg
primary - 0

Playerid - 16
Image  - hisimage.jpg
primary - 0

Playerid - 17
Image - only1image.jpg
primary - 0

Playerid - 18
Image - jamison.jpg
primary - 1

最佳答案

我想一定有一张牌桌?如果是的话,你可以用下面的。。。
(这是MS-SQL Server语法,但逻辑应该在MySQL中保持。)

UPDATE
  Images
SET
  Primary = 1
FROM
  Player
INNER JOIN
  Image
    ON Image.ID = (SELECT MIN(lookup.ID) FROM Image AS lookup WHERE lookup.playerID = Player.ID)
WHERE
  NOT EXISTS (SELECT 1 FROM Image AS lookup WHERE lookup.playerID = Player.ID AND lookup.Primary = 1)

这会故意选择ID最低的映像作为主映像。更改相关子查询以实现不同的逻辑。
编辑
不使用Player表的版本,但可能较慢(需要测试)。。。
UPDATE
  Image
SET
  Primary = 1
WHERE
  ImageID = (SELECT MIN(lookup.ID) FROM Image AS Lookup WHERE lookup.PlayerID = Image.PlayerID)
  AND NOT EXISTS (SELECT 1 FROM Image AS Lookup WHERE lookup.PlayerID = Image.PlayerID AND lookup.Primary = 1)

10-04 11:17
查看更多