sql >> Database >  >> RDS >> Mysql

Geparametriseerde tabelnaam

De enige manier, zonder dynamisch query's op te bouwen, is door in elke combinatie hard te coderen en degene te kiezen die je wilt.


Als de tabelnaam een ​​parameter is voor een opgeslagen procedure, kan dit in IF-blokken zijn. Maar het voelt onhandig aan.


Als de velden van elke tabel hetzelfde zijn, kunt u de tabellen samenvoegen en daaruit selecteren...

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'


Als de velden in elke tabel anders zijn, bent u mogelijk alleen geïnteresseerd in een subset van de velden...

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


Of u kunt NULL's doorgeven voor velden die niet bestaan ​​in de brontabel...

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. mySQL-query voor het selecteren van kinderen

  2. Wat is het doel van systeemtabel master..spt_values ​​en wat is de betekenis van de waarden?

  3. Aan de slag met ProxySQL - Zelfstudie MySQL &MariaDB Load Balancing

  4. LIMIT offset of OFFSET in een UPDATE SQL-query