2013-07-08 7 views
1

У меня возникли проблемы с выяснением того, как я должен это запросить.group_concat filtering

таблица 1

id client_name Group_id  
------------------------------ 
1  IBM    1 
2  DELL    1 
3  DELL    2 
4  MICROSOFT   3 
5  DELL    2 
6  MICROSOFT   2 
7  HP    3 
7  HP    1 

Таблица 2

id group_name 
------------------ 
1  Group1  
2  Group2  
3  Group3 

Используя запрос ниже.

SELECT Client_name, GROUP_CONCAT(distinct(group_name)) merge_group , count(distinct(group_name)) as num_groups 
FROM Table1 t1 
JOIN Table2 t2 
    ON t1.group_id = t2.id 
GROUP BY t1.Client_name 
ORDER BY t1.Id having num_groups > 1 

бы результатом этого

client_name  merge_group 
------------------------- 
DELL    Group1,Group2 
MICROSOFT   Group2,Group3 
HP     Group1,Group3 

мне нужно фильтровать merge_group если я выбираю Group2

результат этого

client_name  merge_group 
------------------------- 
DELL    Group1,Group2 
MICROSOFT   Group2,Group3 

или если запрос Group1, результат это.

client_name  merge_group 
------------------------- 
DELL    Group1,Group2 
HP     Group1,Group3 

ответ

2

Попробуйте ниже:

SELECT Client_name, GROUP_CONCAT(distinct(group_name)) merge_group , count(distinct(group_name)) as num_groups 
FROM Table1 t1 
JOIN Table2 t2 ON t1.group_id = t2.id 
GROUP BY t1.Client_name 
HAVING num_groups > 1 
AND merge_group LIKE '%Group1%' 
+0

Большой ... ив искали этот –

0

Просто введите предложение where и отфильтруйте название группы.

SELECT Client_name, GROUP_CONCAT(distinct(group_name)) merge_group , count(distinct(group_name)) as num_groups 
FROM Table1 t1 
JOIN Table2 t2 
    ON t1.group_id = t2.id 
WHERE group_name = 'Group1' 
GROUP BY t1.Client_name 
ORDER BY t1.Id having num_groups > 1 

Вы также можете сделать сравнение строк, используя также статью HAVING.