0

我有两个表链接在这样的联结表中:

REATE TABLE eventsUsers (
    eventId INT REFERENCES events (eventId),
    userId INT REFERENCES users (userId),
    PRIMARY KEY (eventId, userId)
);

我想用他们的用户登录返回所有事件。到目前为止,我做了以下事情SQL request

    SELECT events.eventId, events.name, users.login
    FROM events
    LEFT OUTER JOIN eventsUsers ON events.eventId = eventsUsers.eventId
    LEFT OUTER JOIN users ON users.userId = eventsUsers.userId

它返回:

 eventid |    name    | login 
---------+------------+-------
       1 | event1     | admin
       1 | event1     | user
       2 | deuxieme   | admin
       3 | troisieme3 | 

但我希望它返回如下内容:

 eventid |    name    | login 
---------+------------+-------
       1 | event1     | [admin, user]
       2 | deuxieme   | admin
       3 | troisieme3 | 

一行用于一个事件和一个用户登录的数组(或列表)。

所以我的问题是:是否有可能做到这一点SQL以及如何做到这一点?

编辑:我用Postgresql.

4

1 回答 1

2

看看这个其他答案,它描述了如何使用该string_agg功能来完成您所要求的事情。

所以要得到你想要的结果:

SELECT events.eventId, events.name, '[' || string_agg(users.login, ',') || ']'
    FROM events
    LEFT OUTER JOIN eventsUsers ON events.eventId = eventsUsers.eventId
    LEFT OUTER JOIN users ON users.userId = eventsUsers.userId
GROUP BY events.eventId, events.name

抱歉,如果我稍微混淆了语法,我实际上是一个 SQL Server 人。

于 2014-10-07T22:51:48.423 回答