如何使用选择查询比较数据库列中逗号分隔值中的单个值?

发布于 2024-10-14 05:05:07 字数 291 浏览 1 评论 0原文

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

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

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

I have a value say for example "1" and I Have column "grp_id" in my db table "tbl_grp". This column "grp_id" contains the commaseperated values as example "1,2,3" I am looking for a way to compare my single value with column "grp_id".

right now I am using the below query:

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

糖果控 2024-10-21 05:05:07

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

不要将 CSV 用于可搜索项目。将该字段分解为 1NF 等价字段。

正如另一个答案所说,这不是多对多关系。这是一对多。

Your data is not in First Normal Form. If you follow the rules for first normal form, you will have keyed access to all data. Some queries might still result in a table scan, but not this kind.

Don't use CSV for searchable items. Decompose this field into a 1NF equivalent.

It's not a many-to-many relationship as another answer said. It's a one-to-many.

烟酒忠诚 2024-10-21 05:05:07

你可以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

You could you FIND_IN_SET:

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

But the correct way to do this, instead of storing a comma-separated list of ids in a column, is to have a many-to-many association between your users and groups:

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
风蛊 2024-10-21 05:05:07

您正在寻找 FIND_IN_SET

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

You're looking for FIND_IN_SET:

SELECT user_id, user_fname, user_lname 
FROM tbl_grp 
WHERE FIND_IN_SET('1', grp_id);
蒗幽 2024-10-21 05:05:07

试试这个,

从 tbl_grp WHERE grp_id LIKE '1' 中选择 user_id、user_fname、user_lname;

尝试一下,我不是数据库大师,但最好我可以建议这个。

Try This,

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

try i am no master in db, but best i can suggest this.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文