2012-09-12 4 views
37

Mam dwie tabele,MySQL aktualizacji tabeli na podstawie kolejnych tabelach cenią

Oto mój pierwszy stół,

ID  SUBST_ID  CREATED_ID 
1  031938   TEST123 
2  930111   COOL123 
3  000391   THIS109 
4  039301   BRO1011 
5  123456   COOL938 
...  ...    ... 

To jest mój drugi stół,

ID  SERIAL_ID  BRANCH_ID 
1  039301   NULL 
2  000391   NULL 
3  123456   NULL 
...  ...    ... 

muszę trochę jak zaktualizować wszystkie wiersze w mojej drugiej tabeli używając danych z mojej pierwszej tabeli.

Musiałoby to zrobić w jednym zapytaniu o aktualizację.

Zarówno SUBST_ID, jak i ID_SERIAL_ID, musi pobrać identyfikator created_id z pierwszej tabeli i wstawić go do drugiej tabeli.

Więc druga tabela staną dodaje,

ID  SERIAL_ID  BRANCH_ID 
1  039301   BRO1011 
2  000391   THIS109 
3  123456   COOL938 
...  ...    ... 

Dziękuję za pomoc i wskazówki.

Odpowiedz

79
UPDATE TABLE2 
     JOIN TABLE1 
     ON TABLE2.SERIAL_ID = TABLE1.SUBST_ID 
SET TABLE2.BRANCH_ID = TABLE1.CREATED_ID; 
2

myślę, że to powinno działać

UPDATE secondTable 
JOIN firsTable ON secondTable.SERIAL_ID = firsTable.SUBST_ID 
SET BRANCH_ID = CREATED_ID 
13

Oprócz Toma odpowiedź, jeśli trzeba powtórzyć operację często i chcą zaoszczędzić czas można zrobić:

UPDATE TABLE1 
     JOIN TABLE2 
     ON TABLE1.SUBST_ID = TABLE2.SERIAL_ID 
SET TABLE2.BRANCH_ID = TABLE1.CREATED_ID 
WHERE TABLE2.BRANCH_ID IS NULL 
1
UPDATE TABLE2 
     JOIN TABLE1 
     ON TABLE1.SUBST_ID = TABLE2.SERIAL_ID 
SET TABLE2.BRANCH_ID = TABLE1.CREATED_ID 
WHERE TABLE2.BRANCH_ID IS NULL or TABLE2.BRANCH_ID=''; 
+0

Czy mógłbyś bardziej rozwinąć swoją odpowiedź, dodając nieco więcej opisu dostarczonego rozwiązania? – abarisone

+0

za pomocą join na set.Id i Serial_Id dostaniesz zestaw Result.and ten zestaw wyników będzie zawierać utworzony id..now Skoncentruj się na zapytaniu po SET tam faktycznie przypisujemy lub dostarczamy wartości from created_Id do Branch_Id .... mam nadzieję, że rozumiesz. . :) –

0

Korzystanie z :

UPDATE TABLE1 
INNER JOIN TABLE2 ON TABLE1.SUBST_ID = TABLE2.SERIAL_ID 
SET TABLE2.BRANCH_ID = TABLE1.CREATED_ID; 

Innym alternatywnym rozwiązaniem jak poniżej: Tutaj używam WHERE klauzuli zamiast JOIN

UPDATE 
    TABLE1, 
    TABLE2 
WHERE 
    TABLE1.SUBST_ID = TABLE2.SERIAL_ID 
SET 
    TABLE2.BRANCH_ID = TABLE1.CREATED_ID; 
0

Można to wykorzystać też:

update TABLE1 set BRANCH_ID = (select BRANCH_ID from TABLE2 where TABLE1.SUBST_ID = TABLE2.SERIAL_ID) 

ale z mojego doświadczenia mogę powiedzieć, że ta droga jest tak powolna i nie polecam jej!