MySQL,根据外键选择多行作为一个

时间:2014-10-08 21:05:10

标签: mysql sql

我有以下2个表格。

| ID | NAME | AGE |
|----|------|-----|
|  0 | John |  30 |
|  1 | Nick |  35 |
|  2 | Mike |  30 |

| USERID |      FRUIT |
|--------|------------|
|      0 |      apple |
|      0 |     orange |
|      1 |     banana |
|      1 |     tomato |
|      1 |      grape |
|      1 | watermelon |
|      2 |       pear |
|      2 |     cherry |

我正在使用此查询以获得年龄<34岁的每个用户喜欢的内容。

SELECT users.name, fruit FROM users,fruits WHERE users.id=fruits.userid AND users.age<34;

结果:

| NAME |  FRUIT |
|------|--------|
| John |  apple |
| John | orange |
| Mike |   pear |
| Mike | cherry |

sqlfiddle

是否有办法只为一个或多个列上的水果的每个用户返回一行?

期望的结果:

| NAME |     FRUIT     |
|------|---------------|
| John |  apple,orange |
| Mike |   pear,cherry |

| NAME |  FRUIT | FRUIT  |
|------|--------|--------|
| John |  apple | orange |
| Mike |   pear | cherry |

我尝试使用GROUP_CONCAT(),但我没有得到我预期的结果,任何帮助都会很棒。

提前感谢您的时间。

2 个答案:

答案 0 :(得分:3)

SELECT users.name, group_concat( fruit )
FROM users,fruits 
WHERE users.id=fruits.userid AND users.age<34
group by user.name

答案 1 :(得分:0)

试试这个(STUFF功能):

CREATE TABLE #Test(
    Name    VARCHAR(100),
    FRUIT   VARCHAR(100)
)

INSERT INTO #Test VALUES
    ('John', 'apple'),
    ('John', 'orange'), 
    ('Mike', 'pear'),
    ('Mike', 'cherry')

SELECT Name,
       STUFF((SELECT ', ' + FRUIT
              FROM #Test t1
              WHERE t1.Name = t2.Name 
              FOR XML PATH(''), TYPE).value('.','VARCHAR(MAX)'),1,2,'') AS 'Fruits'
FROM #Test t2
Group by Name

Drop Table #Test

输出:

Name       Fruits
John    apple, orange
Mike    pear, cherry