Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

É possível referenciar um valor de entrada de tabela mysql de uma segunda entrada de tabela dinamicamente?


Existem 2,5 maneiras de fazer isso (basicamente duas, mas parece que existem três):

Do mais fácil ao mais difícil...

Opção 1:

Se você precisar que a tabelaA reflita o valor da tabelaB, não armazene o valor na tabelaA, apenas use o valor da tabelaB. Use uma junção:
select a.*, b.col1
from tableA a
join tableB b on <some join condition>

ou uma subseleção
select *, (select col1 from tableB where <some condition>) col1
from tableA

Opção 2:

Se você estiver satisfeito com a opção 1, converta-a em uma visualização, que se comporta como uma tabela (exceto as restrições na atualização de visualizações que são junções):
create view myview as 
select ... (one of the above selects)

Opção 3:

Crie um gatilho de banco de dados que seja acionado quando o valor da tabelaB for alterado e copie o valor para a linha/coluna apropriada na tabelaA
create trigger tableB_update
after update on tableB
for each row
update tableA set
tablea_col = new.col1
where id = new.tableA_id;

Observe que new e old são nomes especiais dados às linhas novas e antigas para que você possa fazer referência aos valores na tabela que está sendo atualizada.

Escolha a opção que melhor se adapta às suas necessidades.