sql >> Database teknologi >  >> RDS >> Mysql

Sådan pivoterer du et MySQL-entity-attribute-value-skema

Spørgsmålet nævner MySQL, og faktisk har dette DBMS en speciel funktion til denne type problemer:GROUP_CONCAT(expr) . Tag et kig i MySQL-referencen manual om grupper efter funktioner . Funktionen blev tilføjet i MySQL version 4.1. Du skal bruge GROUP BY FileID i forespørgslen.

Jeg er ikke helt sikker på, hvordan du vil have resultatet til at se ud. Hvis du vil have hver egenskab opført for hver vare (selvom den ikke er indstillet), vil det være sværere. Dette er dog mit forslag til hvordan man gør det:

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;

Dette giver dig alle attributter i samme rækkefølge, hvilket kunne være nyttigt. Outputtet vil være som følgende:

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

På denne måde behøver du kun én enkelt DB-forespørgsel, og outputtet er nemt at parse. Hvis du vil gemme attributterne som ægte Datetime osv. i DB'en, skal du bruge dynamisk SQL, men jeg vil holde mig fra det og gemme værdierne i varchars.



  1. ORA-4031 fejl med Direct NFS

  2. SQL UNION snydeark med 10 nemme og nyttige tips

  3. Sådan bruger du skabeloner i SQL Server Management Studio (SSMS) - SQL Server / TSQL Tutorial Del 16

  4. Regulært udtryk (RegEx) for IPv6 Adskilt fra IPv4