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
Mysql 如何在FROM子句中更新目标表?_Mysql_Sql_Ruby On Rails_Sql Update - Fatal编程技术网

Mysql 如何在FROM子句中更新目标表?

Mysql 如何在FROM子句中更新目标表?,mysql,sql,ruby-on-rails,sql-update,Mysql,Sql,Ruby On Rails,Sql Update,我准备了以下SQL语句,以便用主表对应行的id更新临时表的字段master_id。主控形状包含因其位置而唯一的对象。因此,如果需要,最多应返回一个id 更新登台 设置主\u id= 选择m.id 来自m大师,s 其中m.lat=s.lat m.lon=s.lon ; 但是,查询失败,因为无法在FROM子句中为更新指定目标表“暂存”。我怎样才能解决这个问题 此外,我认为可以使用连接优化查询。如果你能帮上忙,那就太好了! 下面是我尝试连接两个表的步骤: 更新登台 内连接主节点m 在s.lat=m.l

我准备了以下SQL语句,以便用主表对应行的id更新临时表的字段master_id。主控形状包含因其位置而唯一的对象。因此,如果需要,最多应返回一个id

更新登台 设置主\u id= 选择m.id 来自m大师,s 其中m.lat=s.lat m.lon=s.lon ; 但是,查询失败,因为无法在FROM子句中为更新指定目标表“暂存”。我怎样才能解决这个问题

此外,我认为可以使用连接优化查询。如果你能帮上忙,那就太好了! 下面是我尝试连接两个表的步骤:

更新登台 内连接主节点m 在s.lat=m.lat上 s.lon=m.lon 设置s.master_id=m.id; 查询正常,0行受影响0.38秒 匹配的行:14976已更改:0警告:0 下一次尝试:

更新登台 内连接 选择id、lat、lon 从主人那里 作为m 在s.lat=m.lat上 s.lon=m.lon 设置s.master_id=m.id; 查询正常,0行受影响0.35秒 匹配的行:14976已更改:0警告:0 请注意,如果这会影响解决方案的语法,我将使用MySQL


要确认每个实际上都有匹配的行,您需要将表中的每个master_id设置为:

  SELECT m.id 
  FROM master m, staging s
  WHERE m.lat = s.lat 
  AND m.lon = s.lon
与您的想法相反,这将返回许多行。作为一个独立的查询来尝试吧!SQL无法神奇地理解,您只需要具有与正在更新的行匹配的lat和lon的m.id

SQLFiddle目前已关闭,因此我无法再次检查,但您可能需要以下内容:

UPDATE staging 
SET master_id = (
  SELECT m.id 
  FROM master m
  -- where m.lat,m.lon  are the lat,lon values **in the row you're updating**
  WHERE m.lat = staging.lat 
  AND m.lon = staging.lon
);

请注意,这将在未找到匹配lat、lon的暂存中设置为NULL每个主_id值。这可能是问题,也可能不是问题。

你是否需要和m.lon-s.lon,还是应该是和m.lon=s.lon?你能回顾一下你的答案吗?我看不出我的问题有什么不同。仍然没有更新任何行。可能没有一行具有与主表匹配的lat、lon。它们都匹配,因为它是表的副本。请参阅我更新的帖子。可能它们在master_id列中已经有了正确的值。若要获得更有用的帮助,请提供CREATE TABLE和INSERT语句,其中包含此查询不起作用的确切数据。您还搜索过internet以了解为什么会看到匹配的行:已更改:0例如: