Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да направим тази eav заявка, за да направим хоризонтален резултат

Има няколко начина за изпълнение на това. Нещо подобно би трябвало да работи като се присъединява обратно към таблицата няколко пъти за всяка стойност на атрибут:

SELECT p.product_id,
    a.value height,
    a2.value width
FROM Product p
    JOIN Product_Attribute pa ON p.product_id = pa.product_id 
    JOIN Attribute a ON pa.attribute_id = a.attribute_id AND a.name = 'height'
    JOIN Product_Attribute pa2 ON p.product_id = pa2.product_id 
    JOIN Attribute a2 ON pa2.attribute_id = a2.attribute_id AND a2.name = 'width'

А ето и Fiddle .

Ето алтернативен подход, използващ MAX и GROUP BY, който аз лично предпочитам:

SELECT p.product_id,
    MAX(Case WHEN a.name = 'height' THEN a.value END) height,
    MAX(Case WHEN a.name = 'width' THEN a.value END) width
FROM Product p
    JOIN Product_Attribute pa ON p.product_id = pa.product_id 
    JOIN Attribute a ON pa.attribute_id = a.attribute_id 
GROUP BY p.product_id

Успех.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да добавя към всеки ред в MySQL?

  2. как да създадете mysql схема в nodejs

  3. Използване на .aggregate() върху стойност, въведена с помощта на .extra(select={...}) в Django заявка?

  4. MySQL Обяснете ограничението на редовете

  5. Избягване на повторение на JTextField setText около програмата