Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Nome da tabela parametrizada


A única maneira, sem construir consultas dinamicamente, é codificar em cada combinação e escolher a que você deseja.




Se o nome da tabela for um parâmetro para um procedimento armazenado, isso pode estar em blocos IF. Mas parece desajeitado.




Se os campos de cada tabela forem iguais, você pode unir as tabelas e selecionar uma delas...
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'




Se os campos forem diferentes em cada tabela, você pode estar interessado apenas em um subconjunto dos 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




Ou você pode passar NULLs para campos que não existem na tabela de origem...
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