mySql IN子句

时间:2011-11-03 22:00:35

标签: mysql

任何人都知道为什么这不起作用:

SELECT clients_id FROM clients WHERE 34 IN (clients_groups)

我将客户端组ID存储在文本列'clients_groups'中为34,35,42等。当clients_groups中只有一个值时,该语句正常工作,否则返回'not found'。

2 个答案:

答案 0 :(得分:6)

您想要FIND_IN_SET

SELECT clients_id
FROM clients
WHERE FIND_IN_SET('34', clients_groups)

我还建议您考虑规范化您的数据库。您可以使用单独的表来存储客户端和组之间的关系。

答案 1 :(得分:1)

这不是IN的工作原理。 IN子句接受要比较的文字值列表,或子查询中的行集。根据你的需要,你可以使用LIKE:

SELECT clients_id FROM clients WHERE clients_groups LIKE '%34'

但是这会匹配341等等。为什么你有一个值列表?由于这个原因,正常形式通常对此表示不满。