GROUP_CONCAT 带有 WHERE IN 子句

GROUP_CONCAT with WHERE IN clause

我正在尝试将具有特定匹配字符串的多个列组合在一起。

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

我没有收到错误,只是结果是 NULL,即使在 table.

中有包含所有这些名称的列

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

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

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

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

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

然后您 运行 对其进行测试,并验证它是否 return 达到了预期的结果。是 id 非 NULL。 name 列是否已填充?

接下来,您添加了 WHERE 子句,以查看您是否可以获得包含 'john'.

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

当你 运行 那样时,return 是否达到预期效果?如果不是,我们需要弄清楚为什么不。该查询与正在运行的查询有何不同。

在我们得到一个 return 出乎意料的结果的查询之前,我们在编写查询时通过这种逐步细化取得了多大进展?告诉我们。

然后解释为什么将该查询更改为不同的查询会产生特定的结果。即 "expected outcome" 是什么结果。为什么会出现这种结果?


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

如果您向一位忙碌的同事寻求帮助,您应该展示一些工作,以及您的进展情况。而不仅仅是 "here's a query that doesn't work".

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


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

也许答案就像将表达式包装在 IFNULL

中一样简单
SELECT IFNULL( GROUP_CONCAT(foo) ,'')  AS bar
     , 

但我们可能会猜测完全错误的树。