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

Pilih produk dengan beberapa atribut, menggunakan AND sebagai gantinya ATAU concatenator, Model data EAV

Subquery Anda seharusnya seperti ini:

SELECT
  attributes_entity.product_id
FROM
  attributes_entity INNER JOIN attributes
  ON attributes_entity.attribute_id=attributes.id
  INNER JOIN attributes_values ON
  attributes_entity.value_id=attributes_values.id 
WHERE 
  (attributes.name="Memory" AND attributes_values.value="16GB") 
  OR
  (attributes.name="Color" AND attributes_values.value="Gold")
GROUP BY
  attributes_entity.product_id
HAVING
  COUNT(DISTINCT attributes.name)=2

solusi ini menggunakan subquery GROUP BY. Anda harus menggunakan OR karena atributnya tidak bisa Memori dan Warna pada saat yang sama pada baris yang sama, keduanya bisa benar tetapi pada baris yang berbeda. COUNT(DISTINCT atribut.nama) menghitung jumlah atribut baik Warna atau Memori, jika 2 maka setidaknya ada 1 baris di mana kondisi pertama benar dan 1 baris di mana yang lain juga benar.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Memigrasikan Database MySQL dari Amazon RDS ke DigitalOcean

  2. Mysql:Memilih nilai di antara dua kolom

  3. MySQL:ERROR 1022 (23000):Tidak dapat menulis; duplikat kunci dalam tabel '#sql-2b8_2'

  4. Hapus data dari semua tabel di MYSQL

  5. Terapkan ORDER BY pada UNION (Mysql)