#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;
Комментариев нет:
Отправить комментарий