如何使用Select Query比较数据库列中逗号分隔值中的单个值?

时间:2011-01-26 10:07:07

标签: sql mysql normalization

我有一个值例如“1”,我在我的数据库表“grp_id”中有列“tbl_grp”。此列“grp_id”包含逗号值,例如“1,2,3”我正在寻找一种方法来将我的单个值与“grp_id”列进行比较。

现在我正在使用以下查询:

"SELECT user_id, user_fname, user_lname FROM tbl_grp WHERE grp_id='1'";

4 个答案:

答案 0 :(得分:3)

您的数据不是第一范式。如果您遵循第一范式的规则,您将拥有对所有数据的键控访问权限。某些查询可能仍然会导致表扫描,但不是这种。

不要将CSV用于可搜索的项目。将此字段分解为1NF等效值。

另一个答案说,这不是一个多对多的关系。这是一对多的。

答案 1 :(得分:2)

你可以FIND_IN_SET

SELECT user_id, user_fname, user_lname FROM tbl_grp WHERE FIND_IN_SET(1, grp_id);

但是,正确的方法是在用户和组之间建立多对多关联,而不是在列中存储以逗号分隔的ID列表,而是这样做:

user(user_id, user_fname, ...)
group(group_id, group_name, ...)
user_group(#user_id, #group_id) // you can have any number of (user_id, group_id) couples

答案 2 :(得分:1)

您正在寻找FIND_IN_SET

SELECT user_id, user_fname, user_lname 
FROM tbl_grp 
WHERE FIND_IN_SET('1', grp_id);

答案 3 :(得分:0)

试试这个,

SELECT user_id,user_fname,user_lname FROM tbl_grp WHERE grp_id LIKE'1';

尝试我在db中不是主人,但最好我能建议这个。