sql >> Base de Datos >  >> RDS >> Mysql

Nombre de la tabla parametrizada

La única forma, sin crear consultas de forma dinámica, es codificar de forma rígida cada combinación y seleccionar la que desee.


Si el nombre de la tabla es un parámetro para un procedimiento almacenado, puede estar en bloques IF. Pero se siente torpe.


Si los campos de cada tabla son los mismos, puede unir las tablas y seleccionar entre ellas...

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'


Si los campos son diferentes en cada tabla, es posible que solo le interese un subconjunto de los campos...

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


O puede pasar valores NULL para campos que no existen en la tabla de origen...

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