sql >> Database >  >> RDS >> Mysql

samengevoegde tabelrijen in kolommen met kolomtitels van originele rijen

Ik zou gewoon GROUP_CONCAT() in plaats van cursors om de voorbereide verklaring te genereren:

SELECT CONCAT(
 ' SELECT MDE_ID,'

,  GROUP_CONCAT(
     't', MDF_ID, '.MFV_Value AS `', REPLACE(MDF_Label, '`', '``'), '`'
   )

,' FROM ModuleEntries '

, GROUP_CONCAT(
    'LEFT JOIN ModuleEntryFieldValues AS t', MDF_ID, '
       ON t', MDF_ID, '.MFV_MDE_ID = ModuleEntries.MDE_ID
      AND t', MDF_ID, '.MFV_MDF_ID = ', MDF_ID
  SEPARATOR ' ')

) INTO @qry FROM ModuleFields;

Bewaar voor het bewerken van witruimte om het leesbaarder te maken, met uw voorbeeldgegevens @qry zou dan bevatten:

SELECT MDE_ID,
       t1.MFV_Value AS `Height`,
       t2.MFV_Value AS `Width`,
       t3.MFV_Value AS `Weight`
FROM   ModuleEntries
  LEFT JOIN ModuleEntryFieldValues AS t1
         ON t1.MFV_MDE_ID = ModuleEntries.MDE_ID AND t1.MFV_MDF_ID = 1
  LEFT JOIN ModuleEntryFieldValues AS t2
         ON t2.MFV_MDE_ID = ModuleEntries.MDE_ID AND t2.MFV_MDF_ID = 2
  LEFT JOIN ModuleEntryFieldValues AS t3
         ON t3.MFV_MDE_ID = ModuleEntries.MDE_ID AND t3.MFV_MDF_ID = 3

Men kan dan die verklaring voorbereiden en uitvoeren:

PREPARE stmt FROM @qry;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
SET @qry = NULL;

Wat de volgende resultaten oplevert:

MDE_ID    Height    Width    Weight
     1    120cms    30cms    (null)

Bekijk het op sqlfiddle .




  1. Hoe verbinding maken en MySQL opvragen vanuit Lua?

  2. Hoe kan ik een mySQL SELECT IF-instructierij gebruiken om JOIN te worden in een andere tabel?

  3. Hoe tekstgegevens in MySQL op te slaan en op te halen met behoud van de regeleinden?

  4. Een database importeren en exporteren via SSH