我有以下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 |
是否有办法只为一个或多个列上的水果的每个用户返回一行?
期望的结果:
| NAME | FRUIT |
|------|---------------|
| John | apple,orange |
| Mike | pear,cherry |
或
| NAME | FRUIT | FRUIT |
|------|--------|--------|
| John | apple | orange |
| Mike | pear | cherry |
我尝试使用GROUP_CONCAT(),但我没有得到我预期的结果,任何帮助都会很棒。
提前感谢您的时间。
答案 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