sql >> Databasteknik >  >> RDS >> Mysql

Parameteriserat tabellnamn

Det enda sättet, utan att dynamiskt skapa frågor, är att hårdkoda i varje kombination och välja ut den du vill ha.


Om tabellnamnet är en parameter till en lagrad procedur kan detta vara i IF-block. Men det känns otympligt.


Om fälten från varje tabell är desamma kan du sammanföra tabellerna och välja bland dem...

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'


Om fälten är olika i varje tabell kanske du bara är intresserad av en delmängd av fälten...

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


Eller så kan du skicka in NULL för fält som inte finns i källtabellen...

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. Förvandla databasresultat till array

  2. Kriterier för viloläge för datum

  3. Hur bestämmer jag storleken på ett index i MySQL 5.1?

  4. Anslutning hänger ibland med Amazon RDS MySQL &Play Framework 1.2.5 (standardinställningar för c3p0)