Mysql
 sql >> Database >  >> RDS >> Mysql

È possibile fare riferimento a un valore di voce di tabella mysql da una seconda voce di tabella in modo dinamico?

Ci sono 2,5 modi per farlo (fondamentalmente due, ma sembra che ce ne siano tre):

Dal più facile al più difficile...

Opzione 1:

Se hai bisogno della tabellaA per riflettere il valore della tabellaB, non memorizzare affatto il valore nella tabellaA, usa semplicemente il valore della tabellaB. Usa un join:

select a.*, b.col1
from tableA a
join tableB b on <some join condition>

o una sottoselezione

select *, (select col1 from tableB where <some condition>) col1
from tableA

Opzione 2:

Se sei soddisfatto dell'opzione 1, convertila in una vista che si comporta come una tabella (tranne per le restrizioni sull'aggiornamento delle viste che sono join):

create view myview as 
select ... (one of the above selects)

Opzione 3:

Crea un trigger di database che si attiva quando il valore della tabellaB viene modificato e copia il valore nella riga/colonna appropriata nella tabellaA

create trigger tableB_update
after update on tableB
for each row
update tableA set
tablea_col = new.col1
where id = new.tableA_id;

Nota che new e old sono nomi speciali assegnati alle nuove e vecchie righe in modo da poter fare riferimento ai valori nella tabella in fase di aggiornamento.

Scegli l'opzione più adatta alle tue esigenze.