Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Tabela przestawna zwraca tylko 1 wiersz

Po pierwsze:masz dwa atrybuty dla tego samego product_id =1, zmień tabelę product_attributes w ten sposób -

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

Następnie wypróbuj ten -

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;

Wynik:

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

W razie potrzeby dodaj filtr WHERE.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Uzyskaj ostatni rekord każdego miesiąca w MySQL....?

  2. EF6 MySQL StrongTypingException, gdy kolumna nie jest PK

  3. Jak naprawić bazy danych i tabele MySQL

  4. Czy Data jest słowem kluczowym w mysql?

  5. Wyświetl drzewo menu wybranego rodzica