Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Bagaimana membuat kueri eav ini untuk membuat hasil horizontal?

Ada beberapa cara untuk menerapkan ini. Sesuatu seperti ini seharusnya bekerja dengan menggabungkan kembali tabel beberapa kali untuk setiap nilai atribut:

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'

Dan inilah Fiddle .

Berikut adalah pendekatan alternatif menggunakan MAX dan GROUP BY yang saya pribadi lebih suka:

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

Semoga berhasil.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara menggunakan kotak centang untuk mengambil data tertentu dalam database

  2. Menggunakan ALTER untuk menjatuhkan kolom jika ada di MySQL

  3. Kustom ORDER BY untuk mengabaikan 'the'

  4. mysql memesan bidang varchar sebagai bilangan bulat

  5. Grup Mysql DateTime dengan 15 menit