#mysql #sql #select
На этот вопрос уже даны ответы здесь: Не могу составить запрос MySQL для фильтра по товарам (2 ответа) Закрыт 3 года назад. Приветствую. Есть MySQL таблица со следующей структурой: |id_a | id_b | | 1 | 1 | | 1 | 2 | | 1 | 3 | | 2 | 1 | | 2 | 4 | | 3 | 1 | | 3 | 2 | Есть необходимость сделать выборку id_a с фильтром сразу по нескольким значениям id_b. Например нужно выбрать все id_a где id_b = 1 И 2, , т.е так, что бы на выходе мы получили id_a: 1, 3. id_a - 2 нам не подходит т.к. у него ЕСТЬ id_b 1, но НЕТ id_b - 2, при этом нам подходит id_a - 1, т.к. у него есть оба значения id_b, пусть даже есть еще третье значение id_b - 3. Запрос SELECT id_a FROM table WHERE id_b = 1 AND id_b = 2 GROUP BY id_a; не подходит, т.к. в этом случае MySQL ищет что бы в одной строке было сразу оба значения id_b. Есть идея сделать через GROUP_CONCAT объединив id_b в одну строку. Например |id_a | id_b | | 1 | 1, 2, 3 | | 2 | 1, 4 | | 3 | 1,2 | Но в таком случае придется делать запрос, в запросе, что значительно повысит нагрузку на СУБД при выборке, чего допускать не желательно. Буду благодарен любой Вашей помощи.
Ответы
Ответ 1
Можно попробовать такой запрос без группировки: SELECT DISTINCT t1.id_a FROM test t1 INNER JOIN (SELECT DISTINCT id_a FROM test WHERE id_b = 1) t2 ON t1.id_a = t2.id_a WHERE t1.id_b = 2 sqlfiddle Вывод: 1, 2.Ответ 2
и будет вам счастье SELECT id_a FROM table WHERE id_b in (1, 2) GROUP BY id_a;
Комментариев нет:
Отправить комментарий