Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 从另一个表更新多次_Mysql_Sql - Fatal编程技术网

Mysql 从另一个表更新多次

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

我使用此查询,它只获取最后一个媒体并将其从表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 = 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 . . . 然后修复数据结构并使用连接表。