Страницы

Поиск по вопросам

воскресенье, 12 января 2020 г.

Выбор MYSQL записи по нескольким строкам с группировкой по ID [дубликат]

#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;

Комментариев нет:

Отправить комментарий