mysql,逗号分隔

vnjpjtjt  于 2021-06-21  发布在  Mysql
关注(0)|答案(3)|浏览(403)

这个问题在这里已经有答案了

mysql查询在逗号分隔的字符串中查找值(11个答案)
在数据库列中存储分隔列表真的那么糟糕吗(10个答案)
两年前关门了。
我有一个mysql/mariadb表

ID  | name | partner
-----------------------
1     A      2
2     B      1
3     C      5,7
4     D      6,8
5     E      3
6     F      4
7     G      3
8     H      4

如何通过mysql查询来搜索id=3的合作伙伴档案;我希望这个结果完全由查询或存储过程/函数生成。
我试过这样,但有个错误:
从id所在的表中选择id、名称、合作伙伴(从id=3的表中选择id);
我想要这样的输出:

ID  | name | partner
-----------------------
5     E      3
7     G      3
vlf7wbxs

vlf7wbxs1#

一个规范化的模式可能像下面这样简单。。。

ID  | name | partner
-----------------------
1     A      2
2     B      1
3     C      5
3     C      7
4     D      6
4     D      8
5     E      3
6     F      4
7     G      3
8     H      4

……但更可能的是,这将涉及到把合伙人分到一个单独的table上。

3mpgtkmj

3mpgtkmj2#

至于你的 partner 字段是逗号分隔的字符串,其中包含您必须使用的ID函数 FIND_IN_SET ,您的查询必须如下所示:

SELECT id, name, partner from table WHERE FIND_IN_SET(id, partner) > 0
pdsfdshx

pdsfdshx3#

在子查询中使用:

SELECT id FROM table WHERE id=3

因此,您的查询变成:

SELECT id, name, partner from table WHERE id IN (3);

但我想你需要:

SELECT partner FROM table WHERE id=3

结果是:

SELECT id, name, partner from table WHERE id IN ('5,7');

请注意,这是一个字符串,不能用于 IN 功能。
所以你应该像其他人提到的那样,使用 find_in_set 像这样:

SELECT id, partner from docs WHERE FIND_IN_SET (3, partner) > 0;

相关问题