我有一张图片的表格,其中包含相应的listing_id和位置。SQL Update Where Statement
IMAGE_NAME,listing_id,位置
- 可以有每listing_id多个图像。
- 每个图像具有表示显示顺序
如果listing_id不具有在位置1的图像时,我想利用该listing_id最低位置,并将其设置到位置1的整数位置。
喜欢的东西:
update media_table set position = 1 where ...
我有一张图片的表格,其中包含相应的listing_id和位置。SQL Update Where Statement
IMAGE_NAME,listing_id,位置
如果listing_id不具有在位置1的图像时,我想利用该listing_id最低位置,并将其设置到位置1的整数位置。
喜欢的东西:
update media_table set position = 1 where ...
随着语法修正通过@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
其中最小position
大于1,使用这些结果来更新行的时候了。我认为(listing_id, position)
是独一无二的。
逻辑是100%的声音,但我不确定这是否有效(在MySQL的“UPDATE”语法中)。 – 2012-04-10 17:59:55
@ypercube:对,该语法不适用于MySQL。错过了标签。我提供了一个可以工作的替代解决方案。 – 2012-04-10 18:18:18
@ypercube:我必须误读手册,因为您的替代语法清楚地起作用。从子查询中选择,然后*然后*更新涉及的表是没有问题的,然后... – 2012-04-10 18:40:31
试试这个:
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
比较和选择。
“1”是可能的最低位置还是可能有一个“0”? – 2012-04-10 17:50:18