SQL Group LEFT JOIN结果

时间:2012-05-23 08:18:11

标签: sql postgresql

我有几张桌子:

用户

ID

设置

USER_ID

我想返回用户详细信息以及“设置”索引下结果中可访问的给定用户的所有设置,这可能吗?

4 个答案:

答案 0 :(得分:3)

Postgresql有一个ARRAY_AGG函数可以为你进行连接。 e.g。

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 :(得分:1)

假设你在user_id列中有一个索引,你可以这样做:

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

答案 2 :(得分:1)

如果我理解的话,以下查询应该做你想要的......

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

答案 3 :(得分: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;