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

MySQLエンティティ属性値スキーマをピボットする方法

    質問はMySQLに言及しており、実際、このDBMSにはこの種の問題に対する特別な機能があります:GROUP_CONCAT(expr)MySQLリファレンスをご覧くださいgroup-by-functionのマニュアル 。この関数はMySQLバージョン4.1で追加されました。 GROUP BY FileIDを使用します クエリで。

    結果をどのように表示するかはよくわかりません。すべてのアイテムにすべての属性をリストしたい場合(設定されていない場合でも)、それは難しくなります。しかし、これはそれを行う方法についての私の提案です:

    SELECT bt.FileID, Title, Author, 
     GROUP_CONCAT(
      CONCAT_WS(':', at.AttributeName, at.AttributeType, avt.AttributeValue) 
      ORDER BY at.AttributeName SEPARATOR ', ') 
    FROM BaseTable bt JOIN AttributeValueTable avt ON avt.FileID=bt.FileID 
     JOIN AttributeTable at ON avt.AttributeId=at.AttributeId 
    GROUP BY bt.FileID;
    

    これにより、すべての属性が同じ順序で表示されるため、便利な場合があります。出力は次のようになります:

    'F001', 'Dox', 'vinay', 'CustomAttr1:varchar(40):Akash, CustomUseDate:Datetime:2009/03/02'
    

    このように、必要なDBクエリは1つだけで、出力は簡単に解析できます。属性を実際の日時などとしてDBに格納する場合は、動的SQLを使用する必要がありますが、それを避けて値をvarcharsに格納します。



    1. Windows上のODBCアプリケーションをZohoCRMに接続します

    2. PostgreSQLJSON列をHibernateエンティティプロパティにマッピングする

    3. SQL Server(T-SQL)で月の名前を月の番号に変換する

    4. Toadにストアドプロシージャを呼び出す