sql >> Databasteknik >  >> RDS >> Mysql

Hur man pivoterar ett MySQL-entitet-attribut-värde-schema

Frågan nämner MySQL, och faktiskt har detta DBMS en speciell funktion för denna typ av problem:GROUP_CONCAT(expr) . Ta en titt i MySQL-referensen handbok om gruppvisa funktioner . Funktionen lades till i MySQL version 4.1. Du kommer att använda GROUP BY FileID i frågan.

Jag är inte riktigt säker på hur du vill att resultatet ska se ut. Om du vill att alla attribut ska listas för varje objekt (även om det inte har angetts), blir det svårare. Detta är dock mitt förslag på hur man gör:

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;

Detta ger dig alla attribut i samma ordning, vilket kan vara användbart. Utdata kommer att se ut som följande:

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

På så sätt behöver du bara en enda DB-fråga, och utdata är lätt att analysera. Om du vill lagra attributen som real Datetime etc. i DB, måste du använda dynamisk SQL, men jag skulle hålla mig borta från det och lagra värdena i varchars.



  1. Infogar data för att spela in i sqlite

  2. Korrekt användning av transaktioner i SQL Server

  3. Hur man beräknar aktiva användare per vecka (WAU) i MySQL

  4. Hur kan jag stoppa ett Postgres-skript när det stöter på ett fel?