2009-07-01 29 views
36

Próbuję zaktualizować tabela A danymi z tabeli B. Myślałem, że mogę zrobić coś takiego :Aktualizacja za pomocą dwóch tabel?

UPDATE A 
SET A.name = B.name 
WHERE A.id = B.id 

ale niestety, to nie działa.

Ktoś ma pomysł, jak mogę to zrobić?

Odpowiedz

62

Twoje zapytanie nie działa, ponieważ nie masz klauzuli FROM, która określa tabele aliasing za pośrednictwem A/B.

Spróbuj za pomocą następujących: (! Proszę się nie śmiać)

UPDATE A 
    SET A.NAME = B.NAME 
FROM TableNameA A, TableNameB B 
WHERE A.ID = B.ID 

Osobiście wolę używać bardziej wyraźne dołączyć składni dla jasności tzn

UPDATE A 
    SET A.NAME = B.NAME 
FROM TableNameA A 
    INNER JOIN TableName B ON 
     A.ID = B.ID 
+2

Nie wiem, czy można mieć alias w klauzuli SET. Może zależeć od twojego smaku SQL, ale uważam, że skoro jest to dane, które aktualizujesz "A", to jest zabronione. –

14

dla programu Microsoft Access ...

UPDATE TableA A 
    INNER JOIN TableB B 
    ON A.ID = B.ID 
SET A.Name = B.Name 
+0

Wybrana odpowiedź nie działa dla mnie na MariaDB. Ten się zrobił. Dzięki ! –

5

Drapałam się po głowie, nie mogąc uzyskać funkcji syntezy Johna Sansoma Join, przynajmniej w MySQL 5.5.30 InnoDB.

Okazuje się, że to nie działa.

UPDATE A 
    SET A.x = 1 
FROM A INNER JOIN B 
     ON A.name = B.name 
WHERE A.x <> B.x 

Ale to działa:

UPDATE A INNER JOIN B 
    ON A.name = B.name 
SET A.x = 1 
WHERE A.x <> B.x 
+2

Powyższy jest SQL-Server, a nie MySQL? – christiandev

Powiązane problemy