Mysql 从另一个表更新多次
我使用此查询,它只获取最后一个媒体并将其从表1中删除Mysql 从另一个表更新多次,mysql,sql,Mysql,Sql,我使用此查询,它只获取最后一个媒体并将其从表1中删除 UPDATE table1 join table2 as b ON table1.tree_points_guid = b.tree_points_guid left outer join table3 as m ON table1.media_guid like concat('%', m.media_guid, '%') set table1.media_guid = REPLA
UPDATE table1
join
table2 as b ON table1.tree_points_guid = b.tree_points_guid
left outer join
table3 as m ON table1.media_guid like concat('%', m.media_guid, '%')
set
table1.media_guid = REPLACE(table1.media_guid,
concat(m.media_guid, '_', media_type_guid),
'')
where
m.media_setting_guid = '3be0eead659d'
and m.user_guid <> b.user_guid
and table1.media_guid like concat('%', m.media_guid, '%')
;
更新表1
参加
表2为表1上的b。树\u点\u guid=b.树\u点\u guid
左外连接
表3为表1.media_guid上的m,如concat(“%”,m.media_guid“%”)
设置
table1.media\u guid=替换(table1.media\u guid,
concat(m.media\u guid,“,”media\u type\u guid),
'')
哪里
m、 媒体设置guid='3be0eead659d'
和m.user\u guid b.user\u guid
和表1.media_guid,如concat(“%”,m.media_guid“%”)
;
我有
tree_point_media media_guid
1 1|2|3
树\u点\u媒体\u guid
1 1|2|3
更新后我想要
tree_point_media media_guid
1 null
树\u点\u媒体\u guid
1空
但我的问题只是
tree_point_media media_guid
1 1|2|
树\u点\u媒体\u guid
1 1|2|
在同一个查询上单击三次后,我可以得到我想要的结果
但是我只想执行一次,MySQL文档非常清楚当一个
连接中有多个匹配时会发生什么:
对于多表语法,UPDATE将更新名为
在表_中,满足条件的参考。每个匹配行都是
更新一次,即使它多次匹配条件。对于
不能使用多表语法、ORDER BY和LIMIT
也就是说,任意匹配行之一用于更新
在您的案例中,真正的解决方案——正如Barmar在一篇评论中所建议的那样——是为每个tree\u point\u media
和media\u guid
创建一个适当的连接表。在这种情况下,“更新”将很容易,一个简单的delete
语句。将事物列表存储在字符串中是个坏主意。存储数字ID列表是非常糟糕的,因为您将整数存储为字符串。SQL具有这种存储列表的强大数据结构;它叫桌子
如果由于某种原因无法创建连接表,则选项相当有限。在这种情况下,最简单的解决方案是编写一个存储过程,在循环中重复执行更新,直到没有记录匹配。这样的问题就是为什么不应该将列表放在单个列中。您应该规范化您的数据。@Barmar抱歉,无法understand@Barmar我不能以任何方式改变表的设计,这不是另一个解决方案吗?我已经这样做了,但是速度太慢了,但是我已经用循环语句来做了,但是存储过程的问题太严重了slow@Nesreenadly . . . 然后修复数据结构并使用连接表。