2

我有这个完美运行的子查询:

select GROUP_CONCAT(zone SEPARATOR ', ') from typeofru where id in (5,7) /*This works good*/

我遇到的问题是 5 和 7 一起在一个 varchar 列('5,7')上并且不能使它工作

select GROUP_CONCAT(zone SEPARATOR ', ') from typeofru where id in ('5,7') /*This is not working  */

如何将 ('5,7') 转换为值类型以使其正常工作

我需要使用的最后一个查询是这样的,但似乎不起作用:

select name, (select GROUP_CONCAT(zone SEPARATOR ', ') from typeofru where id in (typeofru_ids)) from deviceru where device_id=5
4

1 回答 1

3

利用FIND_IN_SET()

WHERE FIND_IN_SET(ID, '5,7') > 0

如果字符串 str 在包含 N 个子字符串的字符串列表 strlist 中,则返回 1 到 N 范围内的值。字符串列表是由以“,”字符分隔的子字符串组成的字符串。如果第一个参数是常量字符串,第二个参数是 SET 类型的列,则 FIND_IN_SET() 函数被优化为使用位算术如果 str 不在 strlist 中或 strlist 是空字符串,则返回 0。 如果任一参数为 NULL,则返回 NULL。如果第一个参数包含逗号 (“,”) 字符,此函数将无法正常工作。

作为要吸取的教训,不要存储用逗号分隔的值。

如果逗号前后有空格,则需要先替换空格,

WHERE FIND_IN_SET(ID, REPLACE(' 5 , 7', ' ','')) > 0
于 2013-05-18T16:26:46.520 回答