Mysql SQL更新Where语句
我有一个带有相应列表id和位置的图像表 图像\名称、列表\ id、位置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可以有多个图像
- 每个图像都有一个整数位置,表示显示顺序
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的twistedUPDATE
语法中)。@ypercube:对,这种语法不适用于MySQL。没有找到标签。我提供了一个应该有效的替代解决方案。@ypercube:我一定是看错了手册,因为您的替代语法显然有效。从子查询中选择,然后更新涉及的表没有问题……是的,更新的问题与出现在WHERE
子查询中的表(要更新)有关。谢谢!多么奇妙的回答!逻辑是100%正确的,但我不确定这是否有效(在MySQL的twistedUPDATE
语法中)。@ypercube:对,这种语法不适用于MySQL。没有找到标签。我提供了一个应该有效的替代解决方案。@ypercube:我一定是看错了手册,因为您的替代语法显然有效。从子查询中选择,然后更新涉及的表没有问题……是的,更新的问题与出现在WHERE
子查询中的表(要更新)有关。谢谢!多么奇妙的回答!