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

каква mysql заявка трябва да използвам, за да избера категория, която отговаря на ВСИЧКИ мои критерии?

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
        )

Трябва да имате UNIQUE индекс на (cat_id, product_id) (в този ред), за да работи бързо.

Това решение ще използва INDEX FOR GROUP BY за да получите списък с отделни категории и EXISTS предикатът ще бъде малко по-бърз от COUNT(*) (тъй като агрегирането изисква някои допълнителни разходи).

Ако имате повече от два продукта за търсене, коригирайте първия аргумент на LIMIT съответно.

Трябва да е LIMIT n - 1, 1 , където n е броят на елементите в IN списък.

Актуализация:

За да върнете категориите, съдържащи всички продукти от списъка и нищо друго, използвайте това:

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. Необходимо е преносимо решение за SQL upsert (вмъкване+актуализация).

  2. Приставката „FEDERATED“ е деактивирана

  3. Тригер за проследяване на промените в MySQL база данни

  4. Получаване на последния запис за всеки месец в MySQL....?

  5. брои множество колони в една заявка