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

MySQL Изберете къде в много към много

Ако приемем, че искате нещо повече от идентификатора на статията:

SELECT a.id
      ,a.other_stuff
  FROM articles a
  JOIN article_category ac
    ON ac.article_id = a.id
GROUP BY a.id
HAVING GROUP_CONCAT(DISTINCT ac.category_id ORDER BY ac.category_id SEPARATOR ',') = '1,2'

Ако всичко, което искате, е идентификационният номер на статията, опитайте това:

SELECT article_id
  FROM article_category 
GROUP BY article_id
HAVING GROUP_CONCAT(DISTINCT category_id ORDER BY category_id SEPARATOR ',') = '1,2'

Вижте го в действие на адрес http://sqlfiddle.com/#!2/9d213/4

Трябва също да добавим, че предимството на този подход е, че той може да поддържа проверка на произволен брой категории, без да се налага да променяте заявката. Просто направете '1,2' низова променлива и променете това, което се предава в заявката. Така че можете също толкова лесно да търсите статии с категории 1, 2 и 7, като подадете низ от '1,2,7'. Не са необходими допълнителни връзки.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Пакетен файл за свързване на mysql и изпълнение на команди

  2. как да разрешите Обща грешка:2014 Не може да се изпълняват заявки, докато други небуферирани заявки са активни. използвайки PDO връзка

  3. Как бързо да сортирате отново MySQL таблица по една от колоните?

  4. Транспониране на MySQL заявка - нужда от редове в колони

  5. MYSQL избира всички записи, където двойката потребителско име и дата се срещат повече от веднъж