我有一张带有相应listing_id和位置的图像表。
image_name,listing_id,position
如果listing_id在位置1没有图像,我想取该listing_id的最低位置并将其设置为位置1.
类似的东西:
update media_table set position = 1 where ...
答案 0 :(得分:3)
通过@ypercube 的语法修复,该查询现在适用于MySQL:
UPDATE media_table m
JOIN (
SELECT listing_id, min(position) AS position
FROM media_table
GROUP BY listing_id
HAVING min(position) > 1
) x ON (m.listing_id, m.position) = (x.listing_id, x.position)
SET m.position = 1;
说明:
在子查询中找到最小linsting_id
大于1的所有position
。使用这些结果立即更新行。我认为(listing_id, position)
是唯一的。
答案 1 :(得分:0)
UPDATE media_table
SET position=(SELECT MIN(position) FROM media_table)
WHERE listing_id IS NULL;
答案 2 :(得分:0)
尝试一下:
update images i1,
( select i1.image_name, i1.listing_id from images i1
left join images i2
on i1.listing_id = i2.listing_id and i1.position > i2.position
where i2.position is null and i1.position != 1
) f
set position = 1
where i1.image_name = f.image_name and i1.listing_id = f.listing_id;
这假设您可以按image_name, listing_id
标识记录。如果您可以image_name
执行此操作,那么查询会更简单,因为您可以删除listing_id
比较和选择。