SQL Update Where语句

时间:2012-04-10 17:45:56

标签: mysql select

我有一张带有相应listing_id和位置的图像表。

image_name,listing_id,position

  • 每个listing_id可以有多个图像。
  • 每个图像都有一个表示显示顺序的整数位置

如果listing_id在位置1没有图像,我想取该listing_id的最低位置并将其设置为位置1.

类似的东西:

update media_table set position = 1 where ...

3 个答案:

答案 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)是唯一的。

See working demo for MySQL.

答案 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比较和选择。