Existuje 2,5 způsobů, jak to udělat (v podstatě dva, ale zdá se, že existují tři):
Od nejjednoduššího po nejtěžší...
Možnost 1:
Pokud potřebujete, aby tabulka A odrážela hodnotu tabulky B, neukládejte hodnotu do tabulky A vůbec, ale použijte hodnotu tabulky B. Použijte buď spojení:
select a.*, b.col1
from tableA a
join tableB b on <some join condition>
nebo podvýběr
select *, (select col1 from tableB where <some condition>) col1
from tableA
Možnost 2:
Pokud jste spokojeni s možností 1, převeďte ji na pohled, který se chová jako tabulka (s výjimkou omezení týkajících se aktualizace pohledů, které jsou spojeními):
create view myview as
select ... (one of the above selects)
Možnost 3:
Vytvořte spouštěč databáze, který se spustí při změně hodnoty tabulky B a zkopíruje hodnotu do příslušného řádku/sloupce v tabulce A
create trigger tableB_update
after update on tableB
for each row
update tableA set
tablea_col = new.col1
where id = new.tableA_id;
Všimněte si, že new
a old
jsou speciální názvy přidělené novým a starým řádkům, abyste mohli odkazovat na hodnoty v aktualizované tabulce.
Vyberte možnost, která nejlépe vyhovuje vašim potřebám.