表中字段为逗号分隔的数字,去数据字典中查询返回逗号分隔字符串的方法

本文介绍了一种使用SQL进行复杂数据查询的方法,通过group_concat函数将多个字段值组合成一个逗号分隔的字符串,实现了从数据字典表中提取特定用户的所有技能类型。
SELECT
group_concat(
`ty`.`INFORMATION_TYPE_NAME` SEPARATOR ','
)
FROM
(
`BAS_INFORMATION_TYPE` `ty`
LEFT JOIN `BAS_USER_CRAFTSMAN` `f` ON (
find_in_set(
`ty`.`INFORMATION_TYPE_NO`,
`f`.`SKILL_TYPE_NO`
)
)
)
WHERE
(
(`ty`.`FLAG` = 0)
AND (
`f`.`USER_NO` = `bu`.`USER_NO`
)
AND (`f`.`EXAMINE_TYPE` = 1)
)

) AS `GJJN`,



INFORMATION_TYPE_NAME:为数据字典中的具体信息列

BAS_INFORMATION_TYPE:数据字典表

BAS_USER_CRAFTSMAN:逗号分隔数字所在列的表

INFORMATION_TYPE_NO:数据字典的数字列

SKILL_TYPE_NO:逗号分隔数字所在列

FLAG:数据字典当前类别关联条件

GJJN:为转换为逗号分隔字符串的列名


可以使用MySQL的内置函数`GROUP_CONCAT()`和`FIND_IN_SET()`来实现这个需求。 假设我们有两张,一张是字典`dictionary`,包含`code`和`name`两个字段;另一张是需要翻译的`translation`,包含一个`codes`字段,里面是逗号分隔的多个`code`,我们需要将其翻译为以逗号分隔的多个`name`。 可以使用以下SQL语句实现: ``` SELECT GROUP_CONCAT(d.name SEPARATOR ',') AS names FROM dictionary d WHERE FIND_IN_SET(d.code, translation.codes) > 0; ``` 这个SQL语句会首先通过`FIND_IN_SET()`函数找到`translation`中每个`codes`字段中包含的`code`对应的`name`,然后通过`GROUP_CONCAT()`函数将多个`name`以逗号分隔的形式合并为一个字符串,并且起别名为`names`。 需要注意的是,在使用`FIND_IN_SET()`函数时,需要将`translation`中的`codes`字段和`dictionary`中的`code`字段都转换为逗号分隔字符串,否则可能会出现匹配错误的情况。可以使用`CONCAT_WS()`函数来实现这个转换: ``` SELECT CONCAT_WS(',', translation.codes) AS code_str, GROUP_CONCAT(d.name SEPARATOR ',') AS names FROM dictionary d JOIN translation ON FIND_IN_SET(d.code, CONCAT_WS(',', translation.codes)) > 0 GROUP BY translation.id; ``` 这个SQL语句会将`translation`中的每一行都匹配出对应的`name`,并且将`codes`字段转换为逗号分隔字符串,起别名为`code_str`。然后通过`GROUP BY`语句将结果按照`translation`中的每个`id`字段分组,确保每个`id`只有一个结果。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值