Jest na to 2.5 sposobów (w zasadzie dwa, ale wydaje się, że są trzy):
Od najłatwiejszego do najtrudniejszego...
Opcja 1:
Jeśli potrzebujesz tableA, aby odzwierciedlić wartość tableB, nie przechowuj w ogóle wartości w tableA, po prostu użyj wartości tableB. Użyj połączenia:
select a.*, b.col1
from tableA a
join tableB b on <some join condition>
lub podwybór
select *, (select col1 from tableB where <some condition>) col1
from tableA
Opcja 2:
Jeśli jesteś zadowolony z opcji 1, przekonwertuj ją na widok, który zachowuje się jak tabela (z wyjątkiem ograniczeń dotyczących aktualizowania widoków będących złączeniami):
create view myview as
select ... (one of the above selects)
Opcja 3:
Utwórz wyzwalacz bazy danych, który uruchamia się, gdy wartość tabeliB zostanie zmieniona i kopiuje wartość do odpowiedniego wiersza/kolumny w tabeliA
create trigger tableB_update
after update on tableB
for each row
update tableA set
tablea_col = new.col1
where id = new.tableA_id;
Zauważ, że new
i old
to specjalne nazwy nadawane nowym i starym wierszom, dzięki czemu można odwoływać się do wartości w aktualizowanej tabeli.
Wybierz opcję, która najlepiej odpowiada Twoim potrzebom.