【问题标题】:group_concat inserting double quote for empty values in mysqlgroup_concat 在 mysql 中为空值插入双引号
【发布时间】:2020-05-05 08:47:45
【问题描述】:

我在表中存储了一些数据作为 user_values 列中的逗号分隔字符串,因此根据我的要求,我想获取特定的用户数据,并且存储在 user_values 列中的值应该用单引号括起来,为此我正在使用下面的查询和它工作正常,但是如果特定用户在 user_values 列中没有任何值,那么在查询下面获取 user_values 并插入一个双引号但是它应该为该列获得空值,因此如果特定列为空,如何防止双引号用户。

表格

id    user_values
1     1,2
2     3,4,5
3              // empty / no value for this user
4     4,7

mysql查询:

案例 1:如果用户 1 在 user_values 列中有值,则

SELECT id,GROUP_CONCAT( CONCAT("'", REPLACE(user_values,",", "','") , "'")) as user_val 
FROM user 
WHERE id=1;

输出:

案例 2:如果用户没有任何值,则在空列中插入 double

SELECT id, GROUP_CONCAT( CONCAT("'", REPLACE(user_values,",", "','") , "'")) as user_val 
FROM user 
WHERE id=3;

输出:

【问题讨论】:

  • 为什么是REPLACE(user_values,",", "','")?你有逗号user_values吗?
  • 是的,我有逗号
  • 为什么不规范化你的架构?如果做不到这一点,为什么还要使用 RBDMS?

标签: mysql sql group-by group-concat


【解决方案1】:

我怀疑user_values 的某些值是空字符串(与null 值不同,group_concat() 会忽略)。您可以使用group_concat() 中的case 表达式来解决此问题,该表达式将空字符串转换为null 值,例如:

SELECT 
    id,
    GROUP_CONCAT(CASE
        WHEN user_values = '' THEN NULL 
        ELSE CONCAT("'", REPLACE(user_values,",", "','"), "'")
    END) as user_val 
FROM user 
WHERE id = 3;

【讨论】:

  • 非常感谢它正在工作,你能解释一下这个案例吗
  • @user_1234:查看我的更新答案。问题在于空字符串。
【解决方案2】:

我同意 GMB 对该问题的诊断。不过,我认为NULLIF() 提供了一个更简单的解决方案:

SELECT id,
       GROUP_CONCAT( NULLIF(CONCAT("'", REPLACE(user_values, ",", "','") , "'"), "''"
                    ) as user_val 
FROM user 
WHERE id = 3 ;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-16
    • 1970-01-01
    • 2019-07-20
    • 2018-08-18
    • 2019-02-15
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    相关资源
    最近更新 更多