Mysql WHERE IN逗号分隔

时间:2018-05-16 14:00:26

标签: mysql mariadb

我有一个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的合作伙伴的个人资料; 我希望这个结果纯粹由查询或存储过程/函数生成。

我试过这样,但得到了错误:

  

从表WHERE id IN中选择id,name,partner(SELECT id FROM table WHERE id = 3);

我想要这样的输出:

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

3 个答案:

答案 0 :(得分:0)

在您的子查询中,您使用:

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;

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

规范化架构可能与以下内容一样简单......

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

......但更可能的是,它会将合作伙伴分成一个单独的表格。