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

Pivotabel returnerer kun 1 række

For det første:du har haft to attributter for samme product_id =1, skift tabel product_attributes på denne måde -

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

Så prøv denne -

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;
 

Resultat:

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

Tilføj WHERE-filter, hvis det er nødvendigt.



  1. Skal MySQL have sin tidszone indstillet til UTC?

  2. .nextval JDBC indsættelsesproblem

  3. Oracle MED CLAUSE virker ikke?

  4. Firebase:Hvordan læser man fra ekstern DB?