Я пытаюсь обновить строку в таблице amga
только с одной строкой из таблицы amgb
, соединенной их itemTempId
.MySql, объединяющее обновление с внутренним соединением и ограничение
Моя проблема заключается в том, что в таблице amgb
может быть до 6 строк для этого itemTempId
, и мне нужно использовать только один из них для обновления.
Я знаком с выполнением обновлений с помощью объединений, но когда я добавил Limit (чтобы получить только одну строку), я получаю сообщение об ошибке Incorrect usage of update and limit
. Я читал, что это невозможно, но есть ли другой способ сделать это?
Amga
"id" "itemId" "itemTempId" "itemImageName" "itemName" "itemCountry" "userId"
"1" "US1" "T001" \N "Samsung Galaxy Note 5" "US" "1"
"2" "CA2" "T002" \N "Samsung Galaxy Note 6" "CA" "2"
"3" "UK3" "T003" \N "Samsung Galaxy Note 7" "UK" "3"
amgb
"id" "itemId" "itemTempId" "itemImageName" "userId"
"1" "US1" "T001" "front.jpg" "1"
"2" "US1" "T001" "side-left.jpg" "1"
"3" "US1" "T001" "side-right.jpg" "1"
"4" "US1" "T001" "back.jpg" "1"
"5" "CA2" "T002" "front.jpg" "2"
"6" "CA2" "T002" "side-left.jpg" "2"
"7" "CA2" "T002" "side-right.jpg" "2"
"8" "CA2" "T002" "back.jpg" "2"
"9" "UK3" "T003" "front.jpg" "3"
Sql Я использовал
update amga a inner join amgb b on a.itemTempId = b.itemTempId
set a.itemImageName = b.itemImageName where a.itemTempId = 'T001' limit 1;
ожидат Ted результаты: Таблица AMGA после обновления
"id" "itemId" "itemTempId" "itemImageName" "itemName" "itemCountry" "userId"
"1" "US1" "T001" front.jpg "Samsung Galaxy Note 5" "US" "1"
"2" "CA2" "T002" \N "Samsung Galaxy Note 6" "CA" "2"
"3" "UK3" "T003" \N "Samsung Galaxy Note 7" "UK" "3"
Примечание: itemTempId
обновляется с front.jpg
, которая является первой строки для itemTempId = T001
в amgb
Любая помощь оценена.
Обновление Я заметил, что это работает, если я удаляю лимит и что он обновляется. Но правильно ли это сделать? Что делает MySql с другими строками в списке?
update amga a inner join amgb b on a.itemTempId = b.itemTempId
set a.itemImageName = b.itemImageName where a.itemTempId = 'T001';
Как вы определяющую «первый ряд» при вступлении? Я полагаю, что это не случайная строка, это строка с наименьшим идентификатором? (Так как в таблице нет гарантированного порядка строк). – Josien
Первый/самый высокий. В этом случае это будет '1' – Norman
И для' T002' (если 'T002' используется в обновлении) это будет' 5' – Norman