更新:问题是表1有很多表2没有的行,这就是为什么查询在第一次运行时更新了多个行,但是再次运行查询时,它只更新了一个行。我不知道为什么它更新了未包含在JOIN
查询中的行。带JOIN的MySQL更新 - 为什么只用一个值更新每个字段?
我需要更新表1两个领域,从两个字段的数据在表2中
我尝试这样做:
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 rows affected. (Query took 0.1351 seconds.)
I特里d使用完整语法:
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
但发生同样的事情。我是否以错误的方式或其他方式将查询放在一起?
继承人table 2
:
当我运行SELECT与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 row(s) affected
。尽管它更新了几百行。
继承人我的意思: 它没有更新,里面有数据,即使数据是什么它所有的空行与更新不同的行。
告诉我们也在其他表 –
更新:新增表2至原来的职位。 –
它只更新了一行,因为这是它可以找到的所有匹配行对。删除'SET'子句,将'UPDATE'替换为'SELECT * FROM'来查看匹配的行。 – axiac