Mysql SQL更新Where语句

Mysql SQL更新Where语句,mysql,select,Mysql,Select,我有一个带有相应列表id和位置的图像表 图像\名称、列表\ id、位置 每个列表id可以有多个图像 每个图像都有一个整数位置,表示显示顺序 如果列表id的位置1中没有图像,我希望将该列表id的最低位置设置为位置1 比如: update media_table set position = 1 where ... 通过@ypercube的语法修复,该查询现在适用于MySQL: UPDATE media_table m JOIN ( SELECT listing_id, min(pos

我有一个带有相应列表id和位置的图像表

图像\名称、列表\ id、位置

  • 每个列表id可以有多个图像
  • 每个图像都有一个整数位置,表示显示顺序
如果列表id的位置1中没有图像,我希望将该列表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\u id
,其中最小
位置
大于1。使用这些发现立即更新行。我假设
(清单_id,位置)
是唯一的


通过@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\u id
,其中最小
位置
大于1。使用这些发现立即更新行。我假设
(清单_id,位置)
是唯一的

试试看:

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\u name,listing\u id
来识别记录。如果您可以通过
image\u name
执行此操作,则查询会更简单,因为您可以删除
列表\u id
比较和选择。

尝试一下:

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\u name,listing\u id
来识别记录。如果您可以通过
image\u name
执行此操作,那么查询会更简单,因为您可以删除
列表id
比较和选择。

1
可能的最低位置还是可能有
0
存在?是
1
可能的最低位置还是可能有
0
存在?您认为呢想要这样的东西吗?你想要这样的东西吗?逻辑是100%正确的,但我不确定这是否有效(在MySQL的twisted
UPDATE
语法中)。@ypercube:对,这种语法不适用于MySQL。没有找到标签。我提供了一个应该有效的替代解决方案。@ypercube:我一定是看错了手册,因为您的替代语法显然有效。从子查询中选择,然后更新涉及的表没有问题……是的,更新的问题与出现在
WHERE
子查询中的表(要更新)有关。谢谢!多么奇妙的回答!逻辑是100%正确的,但我不确定这是否有效(在MySQL的twisted
UPDATE
语法中)。@ypercube:对,这种语法不适用于MySQL。没有找到标签。我提供了一个应该有效的替代解决方案。@ypercube:我一定是看错了手册,因为您的替代语法显然有效。从子查询中选择,然后更新涉及的表没有问题……是的,更新的问题与出现在
WHERE
子查询中的表(要更新)有关。谢谢!多么奇妙的回答!