sql >> Databasteknik >  >> RDS >> Mysql

Är det möjligt att dynamiskt referera till ett mysql-tabellpostvärde från en andra tabellpost?

Det finns 2,5 sätt att göra detta (i princip två, men det känns som att det finns tre):

Från lättast till svårast...

Alternativ 1:

Om du behöver tabellA för att återspegla tabellB:s värde, lagra inte värdet i tabellA alls, använd bara tabellB:s värde. Använd antingen en join:

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

eller ett underval

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

Alternativ 2:

Om du är nöjd med alternativ 1, konvertera den till en vy som beter sig som en tabell (förutom begränsningar för uppdatering av vyer som är kopplingar):

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

Alternativ 3:

Skapa en databasutlösare som aktiveras när tabellB:s värde ändras och kopierar värdet till lämplig rad/kolumn i tabellA

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

Observera att new och old är speciella namn som ges till de nya och gamla raden så att du kan referera till värdena i tabellen som uppdateras.

Välj det alternativ som bäst passar dina behov.



  1. C#/SQL:säkerhetskopiera och återställa genom att kopiera och ersätta databasfiler?

  2. Hur skapar jag json-format med group-concat mysql?

  3. Se till att intervallvärdet inte överlappar befintliga intervall

  4. Långsam enkel uppdateringsfråga på PostgreSQL-databas med 3 miljoner rader