我尝试将具有某些匹配字符串的多个列组合在一起。
SELECT GROUP_CONCAT(`users`.`id`) FROM `users` WHERE `users`.`name` IN ('john','doe','foo','bar');
我没有出错,只是结果是 NULL ,即使表中有包含所有这些名称的列。如何构造查询以实现预期结果?
NULL
nwlqm0z11#
问:如何构造查询以实现预期结果?答:备份到上一个查询,即正在工作的查询,并返回预期结果。然后找出对该查询所做的更改导致意外行为/意外结果的原因。例如,您可能开始这样编写查询:
SELECT u.id , u.name FROM users u ORDER BY u.name
您运行它来测试它,并验证它是否返回了预期的结果。是 id 非空。是 name 是否填充了列?接下来,您添加了 WHERE 子句,以查看是否可以获取具有 name 包含“john”的列。
id
name
WHERE
SELECT u.id , u.name FROM users u WHERE u.name = 'john' ORDER BY u.name
运行时是否返回预期结果?如果没有,我们需要找出原因。这个查询和正在运行的查询有什么不同。在编写查询时,在我们得到返回意外结果的查询之前,我们用这种逐步细化的方法做了多远?给我们看看。然后解释为什么对该查询所做的更改,到另一个查询中,会产生一个特定的结果。i、 e.“预期结果”是什么结果。为什么会有这样的结果?没有规范,就不可能提出任何建议。示例数据和示例输出将大大有助于澄清需求。您甚至可以建立一个sqlfiddle示例。如果你在向一位忙碌的同事寻求帮助,你就应该拿出一些工作,看看你做了多少。而不仅仅是“这里有一个不起作用的查询”。https://ericlippert.com/2014/03/05/how-to-debug-small-programs/否则,我们只是猜测您希望返回的结果。也许答案就像把一个表达式 Package 在一个 IFNULL ```SELECT IFNULL( GROUP_CONCAT(foo) ,'') AS bar,
IFNULL
但我们很可能猜错了方向。
1条答案
按热度按时间nwlqm0z11#
问:如何构造查询以实现预期结果?
答:备份到上一个查询,即正在工作的查询,并返回预期结果。然后找出对该查询所做的更改导致意外行为/意外结果的原因。
例如,您可能开始这样编写查询:
您运行它来测试它,并验证它是否返回了预期的结果。是
id
非空。是name
是否填充了列?接下来,您添加了
WHERE
子句,以查看是否可以获取具有name
包含“john”的列。运行时是否返回预期结果?如果没有,我们需要找出原因。这个查询和正在运行的查询有什么不同。
在编写查询时,在我们得到返回意外结果的查询之前,我们用这种逐步细化的方法做了多远?给我们看看。
然后解释为什么对该查询所做的更改,到另一个查询中,会产生一个特定的结果。i、 e.“预期结果”是什么结果。为什么会有这样的结果?
没有规范,就不可能提出任何建议。示例数据和示例输出将大大有助于澄清需求。您甚至可以建立一个sqlfiddle示例。
如果你在向一位忙碌的同事寻求帮助,你就应该拿出一些工作,看看你做了多少。而不仅仅是“这里有一个不起作用的查询”。
https://ericlippert.com/2014/03/05/how-to-debug-small-programs/
否则,我们只是猜测您希望返回的结果。
也许答案就像把一个表达式 Package 在一个
IFNULL
```SELECT IFNULL( GROUP_CONCAT(foo) ,'') AS bar
,