mysql使用GROUP_CONCAT子查询多字符返回

需求描述
一个订单有多个类型,数据库保存type_ids字段为多个id用,隔开,查询某个订单所属类型详情时,返回类型对应的名称,即返回type_names为多个名称用,隔开。

解决方案
如下:

 SELECT i.id, order_id,type_ids,
(SELECT GROUP_CONCAT(t.`name`) FROM t_gas_type t WHERE FIND_IN_SET(t.id,type_ids)) AS type_names
FROM t_inspect i

在一开始的应用中,使用了如下的解决方案,但是结果返回不正确。

 SELECT i.id, order_id,gas_type_ids,
(SELECT GROUP_CONCAT(t.`name`) FROM t_gas_type t WHERE t.id in(gas_type_ids)) AS gas_type_names
FROM t_inspect i

理论上返回
测试1,测试2,测试3
实际只返回
测试1

问题原因
在mysql中 in 里面如果是字符串的话,会自动转化成int类型,内部使用了如下方法:
CAST(‘1,2,3’ AS INT) 只返回了1,最终查询结果也只会返回id=1的名称信息。

参考文献 解决mysql查询,in条件参数为带逗号的字符串,查询结果错误

你可能感兴趣的:(数据库)