我有一张名为Advert_images
的表格。在此表中,每个advert_id
可能有几条记录。 Advert_images
表中的每个记录都有一个名为“image_id”的唯一字段。 e.g。
image_id advert_id main
---------------------------
1 1 0
2 1 0
3 1 0
4 2 0
5 2 0
仅针对每个不同main
的第一条记录(最低image_id),将名为advert_id
的字段更新为1 。 IE:我想更新image_id
为1和4的记录,并将主字段设置为1.
答案 0 :(得分:2)
您不能在使用MySQL的单个查询中执行此操作。它不允许您在同时在表上进行子选择的同时更新表。但是,如果它确实如此,则查询将是
UPDATE Advert_images
SET (main = 1)
WHERE (image_id IN (
SELECT min(image_id)
FROM Advert_images
GROUP BY advert_id
));
没有什么说你不能通过外部脚本分两步完成。运行内部查询以获取“最低”图像的ID,然后运行单独的更新查询以更改主字段值。
答案 1 :(得分:2)
使用派生表可以在UPDATE
中多次引用一个表:
UPDATE Advert_images a
INNER JOIN (
SELECT advert_id, MIN(image_id) as image_id FROM Advert_images
GROUP BY advert_id)b
ON b.image_id = a.image_id
SET a.main = 1