Mysql
 sql >> Base de données >  >> RDS >> Mysql

Est-il possible de référencer dynamiquement une valeur d'entrée de table mysql à partir d'une deuxième entrée de table ?

Il y a 2,5 façons de procéder (en gros deux, mais on dirait qu'il y en a trois) :

Du plus simple au plus difficile...

Option 1 :

Si vous avez besoin que tableA reflète la valeur de tableB, ne stockez pas du tout la valeur dans tableA, utilisez simplement la valeur de tableB. Utilisez soit une jointure :

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

ou une sous-sélection

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

Option 2 :

Si vous êtes satisfait de l'option 1, convertissez-la en une vue, qui se comporte comme une table (à l'exception des restrictions sur la mise à jour des vues qui sont des jointures) :

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

Option 3 :

Créez un déclencheur de base de données qui se déclenche lorsque la valeur de tableB est modifiée et copie la valeur dans la ligne/colonne appropriée de tableA

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

Notez que new et old sont des noms spéciaux donnés aux nouvelles et anciennes lignes afin que vous puissiez référencer les valeurs dans la table en cours de mise à jour.

Choisissez l'option qui correspond le mieux à vos besoins.