用逗号选择查询并加入

时间:2014-12-30 10:20:22

标签: mysql sql select join find-in-set

我有以下A和tbl B,我想得到他们的名字,这些名字是用逗号分隔的,但我没有得到我想要的格式。

http://sqlfiddle.com/#!2/149093/10

用户:1,2,3; 2 - 我也应该得到名字A,B,C然后B但是我只得到A和B. 我应该如何获得列用户中的个人姓名,并且还满足至少存在2的条件。谢谢提前。

预期输出为:

整行与A
 整行与B
 整个行用C
 整个行与A

基本上有4行,因为总共有4个用户的名字。

|  USER | CATEGORY | USERNAME |
|-------|----------|----------|
| 1,2,3 |        1 |       A  |
| 1,2,3 |        1 |       B  |
| 1,2,3 |        1 |        C |
|     2 |        1 |        B |

2 个答案:

答案 0 :(得分:2)

试试这个:

SELECT a.user, a.category, b.username 
FROM tblA a 
JOIN tblB b ON find_in_set(b.userid,a.user) 
WHERE FIND_IN_SET(2,a.user)
ORDER BY a.user;

检查SQL FIDDLE DEMO

<强>输出

|  USER | CATEGORY | USERNAME |
|-------|----------|----------|
| 1,2,3 |        1 |        A |
| 1,2,3 |        1 |        B |
| 1,2,3 |        1 |        C |
|     2 |        1 |        B |

答案 1 :(得分:0)

你不应该使用

('1,2,3', '1'),
('1,4,5', '2'),
('1,3,5', '3'),

将多个用户添加到同一类别。相反,请使用您已在下面使用的格式将用户添加到类别中:

('1', '1'),
('2', '1');

所以,而不是:('1,4,5', '2'),

使用:('1', '2'), ('4', '5'), ('1', '2'),