sql >> Database >  >> RDS >> Mysql

Is het mogelijk om dynamisch naar een mysql-tabelinvoerwaarde te verwijzen vanuit een tweede tabelinvoer?

Er zijn 2,5 manieren om dit te doen (eigenlijk twee, maar het voelt alsof er drie zijn):

Van gemakkelijk tot moeilijk...

Optie 1:

Als je tabelA nodig hebt om de waarde van tabelB weer te geven, sla de waarde dan helemaal niet op in tabelA, maar gebruik gewoon de waarde van tabelB. Gebruik ofwel een join:

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

of een subselectie

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

Optie 2:

Als u tevreden bent met optie 1, converteert u deze naar een weergave die zich als een tabel gedraagt ​​(behalve beperkingen voor het bijwerken van weergaven die joins zijn):

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

Optie 3:

Maak een database-trigger die wordt geactiveerd wanneer de waarde van tableB wordt gewijzigd en kopieer de waarde naar de juiste rij/kolom 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;

Merk op dat new en old zijn speciale namen die aan de nieuwe en oude rijen worden gegeven, zodat u kunt verwijzen naar de waarden in de tabel die wordt bijgewerkt.

Kies de optie die het beste bij uw behoeften past.



  1. MySQL-container kan geen initialisatiescripts uitvoeren in Docker Compose

  2. Groepering van gegevens in verschillende tabellen op basis van minimumdatum van een evenement

  3. Meer rijen per groep krijgen met groupBy in Eloquent

  4. Oracle naar PostgreSQL — Cursors en algemene tabeluitdrukkingen