Mam dwa stoliki, oba wyglądają tak
id name value
===================
1 Joe 22
2 Derk 30
Muszę skopiować wartość value
z tableA
na tableB
na podstawie nazwy czeku w każdej tabeli.
Wszelkie wskazówki dotyczące tego UPDATE
oświadczenia?
mysql
sql
sql-update
LeoSam
źródło
źródło
INNER JOIN
jest idealny w tej sytuacji.CONCAT_WS
UPDATE participants_registrations INNER JOIN participants ON participants.id = participants_registrations.participantId INNER JOIN registrations ON registrations.id = participants_registrations.registrationId LEFT JOIN groups ON (groups.id = registrations.groupId) SET registrations.groupId = groups.id, registrations.groupName = groups.name, participants.memberOfGroupName = groups.name
musisz dołączyć do dwóch tabel:
na przykład chcesz skopiować wartość
name
z tabeli A dotableB
miejsca, w którym mają taką samą wartośćID
AKTUALIZACJA 1
AKTUALIZACJA 2
źródło
where
klauzulę lub zmodyfikować ją wwhere
zależności od potrzeb.Druga możliwość to
źródło
.name
jest indeksowane w obu tabelach?Druga opcja jest możliwa również w przypadku korzystania z trybu bezpiecznych aktualizacji (i pojawia się błąd wskazujący, że próbujesz zaktualizować tabelę bez GDZIE, w którym użyto kolumny KLUCZ), dodając:
źródło
źródło
Przechowuj swoje dane w tabeli temp
Teraz zaktualizuj kolumnę
źródło
W moim przypadku przyjęte rozwiązanie było po prostu zbyt wolne. W przypadku tabeli zawierającej 180 000 wierszy szybkość aktualizacji wynosiła około 10 wierszy na sekundę. Dotyczy to indeksów elementów łączenia.
W końcu rozwiązałem problem, stosując procedurę:
Mam nadzieję, że pomoże to w przyszłości tak, jak mi pomogło
źródło
Jeśli masz wspólne pole w obu tabelach, to takie proste! ....
Tabela 1 = tabela, w której chcesz zaktualizować. Tabela 2 = tabela, z której pobierasz dane.
źródło