我有两个表,用户和连接,他们有以下列:
pid_t output 1: 19876
pid_t output 2: 19876
pid_t output 3: 493972479
Parent exiting
我也有这种类型:
CREATE TABLE users (
id serial PRIMARY KEY,
name text
);
CREATE TABLE connections (
from_id int REFERENCES users (id) ON DELETE CASCADE,
to_id int REFERENCES users (id) ON DELETE CASCADE,
status connection_status,
PRIMARY KEY (from_id, to_id),
UNIQUE (from_id, to_id)
);
连接表将为每个连接包含一行,因此如果user1与user2建立连接,则它将是一行,但这并不意味着user2与user1建立了连接。看它像Instagram或Twitter,你有追随者,你跟随的人。因此,如果数据库中有一行,其中user1为 from_id ,而user2为 to_id ,则表示user1正在关注user2。
问题
我想在一个查询中获得用户连接以及我与其连接的关系。例如,假设我是user1,我想找到user2的所有连接(已接受和未决的关注者和被关注者)以及我与user2的连接的连接,可以是accept,pending或null。
答案 0 :(得分:0)
参见附件查询,我与用户加入了两次连接 1.具有connection.from_id的users.id,此连接将使user1所关注的所有用户具有以下状态 2.具有connection.to_id的users.id,此连接将使跟随user1的所有用户处于状态。
非常无能:如果user1有多个连接,您将为每个组合恢复行。
如果你想为每个用户获得一行,你可以使用windows函数,超前和滞后
select user.id as user,
user.name,
following.from_id as user_following,
following.status as status_following,
followees.from_id as user_followees,
followees.status as status_followees
from users
left join connections following on users.id=following .from_id
left join connections followees on users.id=followees.from_id