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

mySQLで列名を動的に選択する方法

    このSQLFiddle をお試しください :

    CREATE TABLE atable (
      prefix1 VARCHAR(10)
      ,prefix2 VARCHAR(10)
      ,notprefix3 INT
      ,notprefix4 INT
    );
    
    INSERT INTO atable VALUES ('qwer qwer', 'qwerqwer', 1, 1);
    INSERT INTO atable VALUES ('qwer qwer', 'asdfaasd', 1, 1);
    INSERT INTO atable VALUES ('qwer qwer', 'qrt vbb', 1, 1);
    INSERT INTO atable VALUES ('qwer qwer', 'sdfg sdg', 1, 1);
    
    SELECT CONCAT('SELECT ', GROUP_CONCAT(c.COLUMN_NAME), ' FROM atable;')
    INTO @query
    FROM INFORMATION_SCHEMA.COLUMNS c
    WHERE c.TABLE_NAME = 'atable'
      AND c.COLUMN_NAME LIKE 'prefix%'
    ORDER BY c.ORDINAL_POSITION;
    
    PREPARE stmt FROM @query;
    
    EXECUTE stmt;
    

    いくつかの問題:

    結果セットに何らかのORDERBYが必要になる可能性があります。

    結合や物事に関してできることには限界があります。

    検証を実行時に移動します。実行時に、テストで見逃される可能性が高くなります。

    スキーマの変更を簡単に処理できることを望んでいます。この手法は、予測可能な特定のタイプのスキーマ変更のみを処理し、他の手法では、おそらくこのコードを変更する必要があります。




    1. MySQL SELECTを使用して仮想列を作成するにはどうすればよいですか?

    2. 複数の列の間にセットのような一意性を適用するにはどうすればよいですか?

    3. R12.2のフォワードクロスエディショントリガー

    4. MySQL-groupbyによって返される行を制御します