【发布时间】:2014-04-13 10:06:26
【问题描述】:
我遇到了 Group_Concat 和 where 过滤器的问题。在我的表中,我得到了链接到客户端的模块名称。我想按模块名称搜索客户端,但在 concat 组中我仍然想查看客户端拥有的所有模块。目前它将显示具有这些模块的所有客户端,但它只会显示该特定模块。我不知道如何让它们一起工作。
关于如何获得预期结果的任何建议??
这些是一些基本表和我尝试的查询以及我得到的结果和我真正想要的结果
Client
+--------------------+
| id | name |
+--------------------+
| 1 | client1 |
| 2 | client2 |
| 3 | client3 |
| 4 | client4 |
+--------------------+
Module
+--------------------+
| id | name |
+--------------------+
| 1 | module1 |
| 2 | module2 |
| 3 | module3 |
| 4 | module4 |
+--------------------+
Client_Module
+-------------------------+
| client_id | module_id |
+-------------------------+
| 1 | 2 |
| 1 | 3 |
| 2 | 1 |
| 2 | 2 |
| 2 | 4 |
| 3 | 4 |
| 4 | 1 |
| 4 | 2 |
| 4 | 3 |
| 4 | 4 |
+-------------------------+
查询:
SELECT client.id, client.name, GROUP_CONCAT(module.name) AS modules
FROM client
LEFT JOIN client_module ON client_module.client_id = client.id
LEFT JOIN module ON module.id = client_module.module.id
WHERE module.id IN (1,2)
结果:
Received
+--------------------------------------------------+
| id | name | modules |
+--------------------------------------------------+
| 1 | client1 | module2 |
| 2 | client2 | module1,module2 |
| 4 | client4 | module1,module2 |
+--------------------------------------------------+
Expected
+------------------------------------------------------+
| id | name | modules |
+------------------------------------------------------+
| 1 | client1 | module2,module3 |
| 2 | client2 | module1,module2,module4 |
| 4 | client4 | module1,module2,module3,module4 |
+------------------------------------------------------+
【问题讨论】:
-
你在查询中使用
WHERE client_module.module_id IN (1,2),这里有什么问题? -
我的错,那不是在原始查询中剥离了错误的部分。改正了
-
问题解决了吗?
-
没有问题。这是一个模拟缺陷
-
你正在使用
client_module.module_id IN (1,2),所以它显然只会选择模块1和模块2..删除where子句以获得预期的输出
标签: mysql sql where group-concat clause