2

你能帮我把“ preference”表中的所有记录都变成返回结果string中的一个吗?p.data

我只能想到CONCAT,但我的内部连接只选择了 1 条记录。

示例查询

SELECT 
    u.userid, 
    p.data

FROM user u

INNER JOIN preference p ON (
  p.userid = u.userid
)

WHERE u.userid = 1

期望的输出

userid  |  data
--------------
1       | 1,2,3,4,5
2       | 1,2,3,4
3       | 1,2,3
4

2 回答 2

3

MySQL 正是GROUP_CONCAT()执行这个功能:

SELECT
  u.userid,
  GROUP_CONCAT(p.data) AS data
FROM
  user u
  INNER JOIN preference p ON u.userid = p.userid
WHERE u.userid = 1
GROUP BY u.userid

由于您的WHERE条款,您只能获得一排。删除该WHERE子句以返回所有用户的行。LEFT JOIN如果要返回表中没有相关行的用户,请将其切换为 a preference

于 2012-07-30T18:49:23.030 回答
2

没关系你的内部加入只加入一个领域。您必须添加分组依据

SELECT 
    u.userid, 
    GroupConcat(p.data) as Data

FROM user u

INNER JOIN preference p ON (
  p.userid = u.userid
)
--WHERE u.userid = 1 With this you not gonna get the desired output.
group by u.userId
于 2012-07-30T18:50:02.030 回答