ОБНОВЛЕНИЕ: Проблема состоит в том, что таблица 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:
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
:
Когда я бегу ОТБОРНОЕ с 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