mysql - 带有 WHERE IN 子句的 GROUP_CONCAT

标签 mysql group-concat

我正在尝试将具有某些匹配字符串的多个列分组在一起。

SELECT GROUP_CONCAT(`users`.`id`) 
FROM `users` 
WHERE `users`.`name`
IN ('john','doe','foo','bar');

我没有收到错误,只是结果为 NULL,即使表中存在具有所有这些名称的列。

如何构建查询以实现预期结果?

最佳答案

问:如何构建查询以实现预期结果?

A:备份到上一个查询,即正在运行并返回预期结果的查询。然后弄清楚为什么您对该查询所做的更改会导致意外行为/意外结果。

例如,您可能开始编写这样的查询:

SELECT u.id
     , u.name 
  FROM users u
 ORDER
    BY u.name 

您运行它来测试它,并验证它是否返回了预期的结果。 id 是否非 NULL。 name 列是否已填充?

接下来,您添加了 WHERE 子句,以查看是否可以获得 name 列包含“john”的行。

SELECT u.id
     , u.name 
  FROM users u
 WHERE u.name = 'john'
 ORDER
    BY u.name

当你运行它时,它返回了预期的结果吗?如果没有,我们需要找出原因。该查询与正在运行的查询有何不同。

在我们得到返回意外结果的查询之前,在编写查询时,我们通过这种逐步细化进行了多远?向我们展示这一点。

然后解释为什么将该查询更改为不同的查询会产生特定的结果。即什么结果是“预期结果”。为什么会出现这样的结果?

<小时/>

如果没有规范,就不可能提出任何建议。示例数据和示例输出对于澄清需求大有帮助。您甚至可以设置一个 SQLFiddle 示例。

如果您向忙碌的同事寻求帮助,您有必要展示一些工作成果,以及您取得了多大的进展。而不仅仅是“这是一个不起作用的查询”。

https://ericlippert.com/2014/03/05/how-to-debug-small-programs/

<小时/>

否则,我们只是猜测您期望返回的结果。

也许答案就像将表达式包装在 IFNULL 中一样简单

SELECT IFNULL( GROUP_CONCAT(foo) ,'')  AS bar
     , 

但我们的猜测很可能是完全错误的。

关于mysql - 带有 WHERE IN 子句的 GROUP_CONCAT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49931886/

相关文章:

MySQL:创建逗号分隔列表并在 IN 中使用

mysql - 在 AWS RDS MySQL 数据库之间传输数据

Mysql获取两个表中匹配项的总数

mysql - group_concat 不适用于计数

GROUP_CONCAT() 上的 MySQL DISTINCT

mysql - 具有多态连接的 Laravel 查询生成器不适用于 SQLite

mysql - 查询成本是 MySQL 查询优化的最佳指标吗?

MySQL - 通过 Group By 和 Rollup 接收到空值

mysql - 从 mysql 查询中获取不同的记录

mysql - MySQL GROUP_CONCAT 函数的替代方案