我正在处理图像表。我需要确保每个玩家都有一个主映像,如果他有一个以上的映像。在下面的示例数据集中,这会将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)