Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Ist es möglich, dynamisch auf einen MySQL-Tabelleneintragswert von einem zweiten Tabelleneintrag zu verweisen?

Es gibt 2,5 Möglichkeiten, dies zu tun (im Grunde zwei, aber es fühlt sich an, als wären es drei):

Vom Einfachsten zum Schwersten...

Möglichkeit 1:

Wenn Sie tableA benötigen, um den Wert von tableB widerzuspiegeln, speichern Sie den Wert überhaupt nicht in tableA, sondern verwenden Sie einfach den Wert von tableB. Verwenden Sie entweder einen Join:

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

oder eine Unterauswahl

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

Möglichkeit 2:

Wenn Sie mit Option 1 zufrieden sind, konvertieren Sie sie in eine Ansicht, die sich wie eine Tabelle verhält (mit Ausnahme der Einschränkungen beim Aktualisieren von Ansichten, die Joins sind):

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

Möglichkeit 3:

Erstellen Sie einen Datenbanktrigger, der ausgelöst wird, wenn der Wert von tableB geändert wird, und kopiert den Wert in die entsprechende Zeile/Spalte in tableA

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

Beachten Sie, dass new und old sind spezielle Namen, die den neuen und alten Zeilen gegeben werden, damit Sie auf die Werte in der zu aktualisierenden Tabelle verweisen können.

Wählen Sie die Option, die Ihren Anforderungen am besten entspricht.