sql >> データベース >  >> RDS >> Mysql

パラメータ化されたテーブル名

    クエリを動的に構築しない唯一の方法は、すべての組み合わせをハードコーディングして、必要なものを選択することです。


    テーブル名がストアドプロシージャのパラメータである場合、これはIFブロックに含めることができます。しかし、それは不格好に感じます。


    各テーブルのフィールドが同じである場合は、テーブルを結合してそれらから選択できます...

    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'
    


    各テーブルでフィールドが異なる場合は、フィールドのサブセットのみに関心がある可能性があります...

    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
    


    または、ソーステーブルに存在しないフィールドにNULLを渡すことができます...

    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. PHP文字列内でMySQLコードをフォーマットする

    2. SQLServerのScalarUDFとは何ですか?

    3. OPENROWSETクエリでの変数の使用

    4. データベース監視の役割を揺るがすのに役立つ5つの優れたリソース