MySql: выберите элементы, которые имеют все значения
45 просмотра
2 ответа
У меня есть таблица Mysql с 3 столбцами: id, company_id и tag_id. Он используется для связи компаний и тегов. Схема таблицы:
CREATE TABLE tbl_company_tag_link (
id BIGINT NOT NULL AUTO_INCREMENT,
company_id BIGINT NOT NULL,
tag_id BIGINT NOT NULL,
PRIMARY KEY(id)
);
Любая компания может быть связана с любым количеством тегов. Мне нужно выбрать компании, к которым прикреплены ВСЕ указанные теги. Например, мне нужен company_id с tag_id = 1,2,3 (все они!). Запрос, на который я пришел, выглядит ужасно:
SELECT company_id, GROUP_CONCAT(tag_id) as group_concat_tag_id
FROM tbl_company_tag_link
WHERE tag_id IN (1,2,3)
GROUP BY company_id
HAVING group_concat_tag_id = "1,2,3"
Мне нужна помощь в написании запроса, это было бы быстро.
Я создал sqlfiddle со своей схемой и запросом для быстрого тестирования: http://sqlfiddle.com/#!9/2416f/2
слишком поздно, нашел тот же вопрос с подробными ответами: Нужна помощь с SQL-запросом, чтобы найти вещи, помеченные всеми указанными тегами
Автор: MihanEntalpo Источник Размещён: 12.11.2019 09:41Ответы (2)
2 плюса
Вы можете попробовать это:
SELECT company_id
FROM tbl_company_tag_link
WHERE tag_id IN (1,2,3)
GROUP BY company_id
HAVING COUNT(DISTINCT tag_id ) = 3
Автор: Rahul Tripathi
Размещён: 06.11.2015 08:33
0 плюса
SQL Fiddle не загружается, но вы можете попробовать это:
SELECT company_id, GROUP_CONCAT(tag_id) as group_concat_tag_id
FROM tbl_company_tag_link
WHERE tag_id IN (1,2,3)
GROUP BY company_id
HAVING COUNT(*) = 3;
Автор: Kostas Mitsarakis
Размещён: 06.11.2015 08:31
Вопросы из категории :
- mysql Двоичные данные в MySQL
- mysql Насколько большой может быть база данных MySQL до того, как производительность начнет снижаться
- mysql Выбрать все столбцы, кроме одного в MySQL?
- mysql MySQL или PDO - каковы плюсы и минусы?
- mysql Как выбрать n-ую строку в таблице базы данных SQL?
- mysql MyISAM против InnoDB
- mysql Обмен значениями столбца в MySQL
- mysql Есть ли способ увидеть ход выполнения инструкции ALTER TABLE в MySQL?
- mysql MySQL Error 1093 - Can't specify target table for update in FROM clause
- mysql Как я могу предотвратить SQL-инъекцию в PHP?
- mysql Как быстро переименовать базу данных MySQL (изменить имя схемы)?
- mysql Получил ошибку 122 из механизма хранения
- mysql Простой способ экспортировать таблицу SQL без доступа к серверу или phpMyADMIN
- mysql mysqldump | mysql выдает ошибку «слишком много открытых файлов». Зачем?
- mysql Ошибка MySQL 1153 - Получен пакет, размер которого превышает байты max_allowed_packet
- mysql Как создать индекс в части даты поля DATETIME в MySql
- mysql Какое наилучшее решение для пула соединений с базой данных в python?
- mysql Активный флаг или нет?
- mysql Запустите MySQLDump без таблиц блокировки
- mysql Как восстановить файл дампа из mysqldump?