group_concat 为 mysql 中的空值插入双引号

group_concat inserting double quote for empty values in mysql

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

table

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;

输出:

我怀疑 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;

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

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