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

kueri mysql apa yang harus saya gunakan untuk memilih kategori yang cocok dengan SEMUA kriteria saya?

SELECT  cat_id
FROM    (
        SELECT  DISTINCT cat_id
        FROM    cat_product
        ) cpo
WHERE   EXISTS
        (
        SELECT  NULL
        FROM    cat_product cpi
        WHERE   cpi.cat_id = cpo.cat_id
                AND product_id IN (2, 3)
        LIMIT 1, 1
        )

Anda harus memiliki UNIQUE indeks di (cat_id, product_id) (dalam urutan ini) agar ini bekerja dengan cepat.

Solusi ini akan menggunakan INDEX FOR GROUP BY untuk mendapatkan daftar kategori yang berbeda, dan EXISTS predikat akan sedikit lebih cepat dari COUNT(*) (karena agregasi memerlukan beberapa overhead).

Jika Anda memiliki lebih dari dua produk untuk dicari, sesuaikan argumen pertama ke LIMIT sesuai.

Seharusnya LIMIT n - 1, 1 , di mana n adalah jumlah item dalam IN daftar.

Pembaruan:

Untuk mengembalikan kategori yang menahan semua produk dari daftar dan tidak ada yang lain, gunakan ini:

SELECT  cat_id
FROM    (
        SELECT  DISTINCT cat_id
        FROM    cat_product
        ) cpo
WHERE   EXISTS
        (
        SELECT  NULL
        FROM    cat_product cpi
        WHERE   cpi.cat_id = cpo.cat_id
                AND product_id IN (2, 3)
        LIMIT 1, 1
        )
        AND NOT EXISTS
        (
        SELECT  NULL
        FROM    cat_product cpi
        WHERE   cpi.cat_id = cpo.cat_id
                AND product_id NOT IN (2, 3)
        )


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Permintaan untuk memilih string yang diakhiri dengan karakter tertentu

  2. Apakah aman menyimpan kata sandi plaintext di MySQL *sementara*?

  3. Kata sandi MySQL () berfungsi untuk PHP

  4. PHP Mengurutkan koordinat terdekat

  5. Cara Menyesuaikan Cadangan MySQL &MariaDB Anda dengan ClusterControl