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

kueri satu-ke-banyak mysql dengan negasi dan/atau banyak kriteria

Saya akan menulis pengecualian bergabung tanpa subkueri:

SELECT p.productid
FROM   products p
INNER JOIN producttags AS t ON p.productid = t.productid
LEFT OUTER JOIN producttags AS x ON p.productid = x.productid 
       AND x.tag IN ('Motorcycle', 'Green')
WHERE  p.active = 1
       AND t.tag IN ( 'Ford', 'Black', 'Skateboard' )
       AND x.productid IS NULL;

Pastikan Anda memiliki indeks pada produk di dua kolom (aktif, productid) dalam urutan itu.

Anda juga harus memiliki indeks pada producttag di atas dua kolom (productid, tag) dalam urutan itu.

Permintaan lain yang perlu saya lakukan adalah sesuatu seperti semua (Mobil) atau (Skateboard) atau (Hijau DAN Sepeda Motor) atau (Merah DAN Sepeda Motor).

Terkadang kondisi kompleks ini sulit bagi pengoptimal MySQL. Salah satu solusi umum adalah menggunakan UNION untuk menggabungkan kueri yang lebih sederhana:

SELECT p.productid
FROM   products p
INNER JOIN producttags AS t1 ON p.productid = t1.productid
WHERE  p.active = 1
   AND t1.tag IN ('Car', 'Skateboard')

UNION ALL

SELECT p.productid
FROM   products p
INNER JOIN producttags AS t1 ON p.productid = t1.productid
INNER JOIN producttags AS t2 ON p.productid = t2.productid 
WHERE  p.active = 1
   AND t1.tag IN ('Motorcycle')
   AND t2.tag IN ('Green', 'Red');

PS:Tabel pemberian tag Anda bukan tabel Entity-Attribute-Value.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kapan menggunakan SQL_NO_CACHE

  2. Pilih hanya beberapa kolom dari tabel di LEFT JOIN

  3. Cara JSON mengurai gambar dari mysql dan mengisi tampilan daftar

  4. Hasil loop PDO PHP

  5. Kesalahan sintaks MySQL dalam pernyataan WHILE