2012-05-23 41 views
1

我有几个表:SQL集团LEFT JOIN结果

用户

ID

设置

USER_ID

我想回到用户详细信息以及在结果中可访问的给定用户的所有设置呃'设置'索引,这可能吗?

回答

3

PostgreSQL有一个ARRAY_AGG功能,将做串联为您服务。例如

SELECT Users.ID, 
     ARRAY_AGG(COALESCE(Name || ' : ' || Value, '')) AS Settings 
FROM Users 
     LEFT JOIN Settings 
      ON Users.ID = Settings.User_ID 
GROUP BY Users.ID 

你的表结构有点含糊所以上面是基于我对SQL Fiddle

1

假设你在user_id列一个指标,你可以做这样的事情:

select u.*, s.* 
from Users u 
inner join Settings s on (u.id = s.user_id); 
1

下面的查询应该做你想要什么,如果我很好的理解...

SELECT Users.*, Settings.* 
FROM Users 
JOIN Settings ON Settings.user_id = Users.id 
+0

这工作,但我想要做的是为每个用户返回单行其设置分组创建的模式在结果中的'设置'下。 –

+0

那么,你有更多与一个用户相关的设置吗? – aleroot

1

尝试GROUP_CONCAT

像这样在mysql?

SELECT u.id, GROUP_CONCAT(s.id) 
FROM Users u 
INNER JOIN Settings s ON u.id = s.user_id 
GROUP BY u.id; 

编辑:

PostgreSQL的版本:

SELECT u.id, STRING_AGG(s.id) 
FROM Users AS u 
INNER JOIN Settings AS s ON u.id = s.user_id 
GROUP BY u.id; 
+2

PostgreSQL没有'group_concat'功能。等价的PostgreSQL函数是'string_agg' –