Mysql
 sql >> Base de données >  >> RDS >> Mysql

Nom de table paramétré

La seule façon, sans créer dynamiquement de requêtes, est de coder en dur dans chaque combinaison et de choisir celle que vous voulez.


Si le nom de la table est un paramètre d'une procédure stockée, cela peut être dans des blocs IF. Mais c'est maladroit.


Si les champs de chaque table sont les mêmes, vous pouvez réunir les tables ensemble et sélectionner parmi celles-ci...

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 les champs sont différents dans chaque table, vous n'êtes peut-être intéressé que par un sous-ensemble des champs...

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 vous pouvez passer des valeurs NULL pour les champs qui n'existent pas dans la table source...

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