MySQL使用JOIN更新-为什么它只使用一个值更新每个字段?

MySQL使用JOIN更新-为什么它只使用一个值更新每个字段?,mysql,Mysql,更新:问题是表1有许多表2没有的行,这就是为什么我第一次运行查询时,查询更新了许多行,但再次运行查询时,它只更新了一行。我不知道为什么它会更新未包含在联接查询中的行 我需要用表2中两个字段的数据更新表1中的两个字段 我试过这个: UPDATE heroku_chemical_healtheffect h, chebi2_compounds c SET h.chebi_id = c.chebi_accession, h.chebi_name = c.name WHERE h.name = c.

更新:问题是表1有许多表2没有的行,这就是为什么我第一次运行查询时,查询更新了许多行,但再次运行查询时,它只更新了一行。我不知道为什么它会更新未包含在联接查询中的行

我需要用表2中两个字段的数据更新表1中的两个字段

我试过这个:

UPDATE heroku_chemical_healtheffect h,
chebi2_compounds c  
SET h.chebi_id = c.chebi_accession, h.chebi_name = c.name
WHERE h.name = c.name
但它返回:1行受影响。查询耗时0.1351秒

它将表2中第一行的相同值插入表1的每一行:

我尝试使用完整的语法:

UPDATE heroku_chemical_healtheffect AS h
INNER JOIN chebi2_compounds AS c
ON h.name = c.name
SET h.chebi_id = c.chebi_accession, h.chebi_name = c.name
但同样的事情也发生了。我是不是把问题拼错了

表2:

当我运行SELECT with JOIN查询时:

SELECT * FROM heroku_chemical_healtheffect AS h 
JOIN chebi2_compounds AS c 
ON h.name = c.name 
我认为这可能是索引的问题,所以我从h.chebi_id和h.chebi_name中删除了索引,并将索引放在h.name和c.name上,但它没有改变任何东西

奇怪的是,它没有覆盖其中已经存在的一些值。一些h.chebi_id字段中有不同的值,因此它们保持不变。它只是它更新的空白字段。当它将相同的值插入到每一个带有空白h.name字段的行中时,它返回1行受影响的数据。即使它更新了几百行

我的意思是: 它没有更新包含数据的行,即使数据与它更新的所有空白行不同。p> 试试这个:

UPDATE 
     heroku_chemical_healtheffect 
SET
  heroku_chemical_healtheffect.chebi_id = chebi2_compounds.chebi_accession, 
  heroku_chemical_healtheffect.chebi_name = chebi2_compounds.name

FROM
    heroku_chemical_healtheffect 
    INNER JOIN chebi2_compounds 
    ON heroku_chemical_healtheffect.name = chebi2_compounds.name

还向我们展示另一个tableUpdated:将表2添加到原始帖子中。它只更新了一行,因为它可以找到所有匹配的行对。删除SET子句,用SELECT*FROM替换UPDATE以查看匹配的行。我这样做了,查看更新的帖子。哦,在这种情况下,只有一行需要更新。MySQL不会报告值未更改的行的更新。如果您再次运行更新,它将返回0个受影响的行。它给了我以下错误:1064-您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,以了解在第行使用“FROM heroku_chemical_healthfeffect AS h INNER JOIN chebi2_components AS”的正确语法7@nimourpristou没有来自的消息。表位于SET子句之前。