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

时间:2016-12-16 14:45:13

标签: mysql

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

我需要更新表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.)

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

我尝试使用完整语法:

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

但同样的事情发生了。我是以错误的方式将查询拼凑在一起的吗?

Heres table 2

enter image description here

当我使用JOIN查询运行SELECT时:

SELECT * FROM heroku_chemical_healtheffect AS h 
JOIN chebi2_compounds AS c 
ON h.name = c.name 

enter image description here

我认为这可能是索引的问题,所以我从h.chebi_idh.chebi_name删除了索引,并将索引放在h.namec.name上,但它没有&#39改变任何事情。

奇怪的是,它并没有覆盖那里已有的一些值。某些h.chebi_id字段中包含不同的值,并且它们保持不变。它只更新了空白字段。当它向具有空白h.name字段的每一行插入相同的值时,它返回1 row(s) affected。即使它更新了几百行。

这是我的意思: enter image description here 它没有更新包含数据的行,即使数据与更新所有空行的数据不同。

1 个答案:

答案 0 :(得分:0)

试试这个:

n=10
while true; do    # "Infinite" loop
    expr "$n" - 3
    case $? of
       1)  break ;;
       2)  echo "Error with expr" >&2; break ;;
    esac

    ...
done