我正在尝试将具有某些匹配字符串的多个列分组在一起。
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/