我在获取加密值时遇到错误
GROUP_CONCAT(DISTINCT CONCAT('MAX(IF
)
标签,实际上我正在尝试获取表的枢轴值,我有两个包含数千行值的表,但为了简单起见,我在下面简要给出了一些 -
individual_data 表为,
-----------------------------------
|ID |fieldname |answertext|
-----------------------------------
|30101 |state |0 |
-----------------------------------
|30101 |Number |4 |
-----------------------------------
|30101 |Name |Rajbanshi |
-----------------------------------
|30101 |Main |RAJBANSHI |
-----------------------------------
|30101 |Surname |RAJBANSHI |
-----------------------------------
|30201 |state |0 |
-----------------------------------
|30201 |Number |4 |
-----------------------------------
|30201 |Name |Pawar |
-----------------------------------
|30201 |Main |Ramesh |
-----------------------------------
|30201 |Surname |Pawar |
-----------------------------------
*注意-在此表中,“aswertext”字段已加密,但为了清楚起见,我给出了实际值,并且我需要该值出现在输出中...
和 sms_household 表一样,
-------------------------
|HHID |sampletype |urid|
-------------------------
|30100 |3 |3008|
-------------------------
|30200 |4 |3005|
-------------------------
并希望得到所需的结果,
------------------------------------------------------------------------------
|ID |state |Number |Name |Main |Surname |sampletype |urid |
------------------------------------------------------------------------------
|30101 |0 |4 |Rajbanshi |RAJBANSHI |RAJBANSHI |3 |3008 |
------------------------------------------------------------------------------
|30201 |0 |4 |Pawar |Ramesh |Pawar |4 |3005 |
------------------------------------------------------------------------------
同样,我编写了如下查询,
SET @@group_concat_max_len = 3000;
SET @sql = NULL;
SELECT
GROUP CONCAT (DISTINCT
CONCAT(
'MAX(IF(I.fieldname = ''',
fieldname,
''', convert(aes_decrypt(answertext,'xyz')USING utf8), NULL)) AS ',
fieldname
)
) INTO @sql
FROM individual_data;
SET @sql = CONCAT('SELECT I.ID, H.sampletype, H.urid', @sql,
'FROM individual_data I inner join sms_household H on H.hhid = concat'(left(I.ID,4),'0')' and H.hhid like '30%' and H.urid like '30%' GROUP BY I.prim_key');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;`
但我在 `convert(aes_decrypt(answertext,'basbas')USING utf8), NULL)) AS '.....
行中收到语法错误消息我不明白这段代码有什么问题..!!
最佳答案
你的代码很难理解。至少,group_concat()
中有拼写错误,并且 'xyz'
周围的引用不足。
这些类型的语句很难构造。我喜欢使用带有 replace()
的方法,而不是带有 concat()
的方法。这样可以更清楚地看到最终表达式的结构。
所以,像这样:
set @exp = 'max(case when i.fieldname = ''@f''
then convert(aes_decrypt(@a, ''xyz'') USING utf8)
end) as @f'
select group_concat(distinct replace(replace(@exp, '@f', fieldname
), '@a', answertext
)
) INTO @sql
FROM individual_data;
我不能 100% 确定这是否是您的意图,但这应该会让您走上一条更好的道路。
关于MySQL-使用 MAX 查询 GROUP_CONCAT 中的加密值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34288161/