2016-12-16 2 views
0

ОБНОВЛЕНИЕ: Проблема состоит в том, что таблица 1 имеет много строк, которые нет в таблице 2, поэтому запрос обновил число строк при первом запуске, но снова выполнил запрос, он только обновил один ряд. Я не знаю, почему он обновил строки, которые не были включены в запрос JOIN.Обновление MySQL с помощью 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

I trie с использованием полного синтаксиса:

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 * FROM heroku_chemical_healtheffect AS h 
JOIN chebi2_compounds AS c 
ON h.name = c.name 

enter image description here

Я считал, возможно, это была проблема с индексами, так что я удалил индексы от h.chebi_id и h.chebi_name и указатели на h.name и c.name, но это ничего не изменило.

Странно, что он не переписывает некоторые из значений, которые уже существуют. Некоторые из полей h.chebi_id имеют в них разные значения, и они оставляют их неповрежденными. Его только пустые поля, которые он обновил. И когда он вставил одно и то же значение в каждую строку с пустым полем h.name, он вернул 1 row(s) affected. Несмотря на то, что он обновил несколько сотен строк.

Вот что я имею в виду: enter image description here Это не обновить строку, которая была в нем данные, даже если данные отличалось от того, что он обновил все пустые строки с.

+1

показывает нам также другую таблицу –

+0

Обновлено: Добавлена ​​таблица 2 к исходному сообщению. –

+0

Он обновил только одну строку, потому что это все соответствующие пары строк, которые он может найти. Удалите предложение 'SET', замените' UPDATE' на 'SELECT * FROM', чтобы увидеть соответствующие строки. – axiac

ответ

0

Попробуйте это:

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 
+0

Это дало мне эту ошибку: '# 1064 - У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с 'FROM heroku_chemical_healtheffect AS h INNER JOIN chebi2_compounds AS' в строке 7' –

+0

@SelfDecodeSupport i отредактировал мой ответ –

+1

@nimourpristou Нет 'FROM' в синтаксис ['UPDATE'] (http://dev.mysql.com/doc/refman/5.7/en/update.html). И таблица (таблицы) предстает перед предложением 'SET'. – axiac

Смежные вопросы