sql >> Database >  >> RDS >> Mysql

Draaitabel retourneert slechts 1 rij

Ten eerste:je hebt twee attributen gehad voor hetzelfde product_id =1, verander tabel product_attributes op deze manier -

INSERT INTO `product_attributes` (`product_id`,`type`,`value`) VALUES
  (1,1,'blue'),
  (1,2,'shirt'),
  (2,1,'green'),
  (2,2,'pants');

Probeer dan deze -

SET @sql = NULL;
SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'MAX(IF(pat.name = ''', name, ''', pa.value, NULL)) AS ', name
    )
  ) INTO @sql
FROM product_attribute_types;

SET @sql = CONCAT('SELECT pa.product_id, ', @sql, ' FROM product_attributes pa INNER JOIN product_attribute_types pat ON pa.type = pat.id GROUP BY pa.product_id');

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

Resultaat:

+------------+-------+-------+
| product_id | color | name  |
+------------+-------+-------+
|          1 | blue  | shirt |
|          2 | green | pants |
+------------+-------+-------+

Voeg indien nodig een WHERE-filter toe.



  1. Door komma's gescheiden waarde van tabelkolom in rijen splitsen met mysql?

  2. Een sha1-hash van een rij maken in Oracle

  3. Hoe de bytegrootte van de resultatenset in een SQL-query te krijgen?

  4. XML-gegevens extraheren met Oracle-query