sql >> Databáze >  >> RDS >> Mysql

Parametrizovaný název tabulky

Jediný způsob, bez dynamického vytváření dotazů, je natvrdo zakódovat každou kombinaci a vybrat tu, kterou chcete.


Pokud je název tabulky parametrem uložené procedury, může to být v blocích IF. Ale je to neohrabané.


Pokud jsou pole z každé tabulky stejná, můžete tabulky sjednotit a vybrat z nich...

CREATE VIEW myUnifiedStructure AS
      SELECT 'Table1' AS tableName, * FROM Table1
UNION SELECT 'Table2' AS tableName, * FROM Table2
UNION SELECT 'Table3' AS tableName, * FROM Table3
-- etc

SELECT * FROM myUnifiedStructure WHERE tableName = 'Table1'


Pokud se pole v každé tabulce liší, může vás zajímat pouze podmnožina polí...

CREATE VIEW myUnifiedStructure AS
      SELECT 'Table1' AS tableName, field1 AS field1, field4 AS field2 FROM Table1
UNION SELECT 'Table2' AS tableName, field2 AS field1, field3 AS field2 FROM Table2
UNION SELECT 'Table3' AS tableName, field2 AS field1, field4 AS field2 FROM Table3
-- etc


Nebo můžete zadat hodnoty NULL pro pole, která ve zdrojové tabulce neexistují...

CREATE VIEW myUnifiedStructure AS
      SELECT 'Table1' AS tableName, NULL   AS field1, field2 AS field2 FROM Table1
UNION SELECT 'Table2' AS tableName, field1 AS field1, field2 AS field2 FROM Table2
UNION SELECT 'Table3' AS tableName, field1 AS field1, NULL   AS field2 FROM Table3
-- etc


  1. Jak zrychlit SQL dotazy? indexy?

  2. Java/Mysql Jak byste vložili celý soubor SQL na server mysql?

  3. Optimalizace výkonu MySQL:pořadí podle pole data a času

  4. Typ tabulky v příkladu uložené procedury Oracle