Mysql错误:子查询返回超过1行(但我希望它 - 我想在每一行上选择一个向量)

时间:2013-04-21 21:16:14

标签: mysql sql

为简单起见,假设我有表usersinterests

用户

id | name
---------
1  | amy
2  | brian
3  | carole

利益

uid | interest
--------------
1   | apples
3   | catfish
3   | cobwebs
3   | cryogenics

我想要回来的是看起来像

的输出
name  | interests
----------------
amy   | apples
brian | 
carole| catfish, cobwebs, cryogenics

其中,兴趣可以是由所有相关值与某些分隔符或离散值向量的串联组成的字符串。我有兴趣将它转储到一个文件中,而不是把它放在一个表中或用它做任何其他SQL的东西。做

SELECT name, (SELECT interest from interests where uid=id) as interests from users;

给我标题中提到的错误。这在SQL范例中是不可能的吗?我知道我可以将这些表的连接转储到一个文件中,然后使用python脚本或其他东西聚合我需要的值,但这感觉不够优雅。

2 个答案:

答案 0 :(得分:3)

试试这个

 SELECT name , group_concat(interest) as interests from interests 
 LEFT JOIN users on users.id = interests.uid 
 GROUP BY name

DEMO HERE

更新

如果你想要空格,请执行group_concat(interest SEPARATOR ', ')

答案 1 :(得分:0)

SELECT u.name, i.interest
FROM users AS u, interests AS i
WHERE u.uid = i.id

尝试加入,这可能有效。

由于select和from语句的排序,您可能会收到错误,或者您需要在名称后面加一个逗号。像:

SELECT name, ( *then your select statement here ...* )