SQL收件箱按发件人id或收件人id列出所有邮件

SQL收件箱按发件人id或收件人id列出所有邮件,sql,postgresql,Sql,Postgresql,我有一个表消息如下: CREATE TABLE messages ( id uuid DEFAULT gen_random_uuid() PRIMARY KEY, created_at timestamp with time zone NOT NULL DEFAULT now(), sender_id uuid NOT NULL REFERENCES users(id), receiver_id uuid NOT NULL REFERENCES users(id)

我有一个表
消息
如下:

CREATE TABLE messages (
    id uuid DEFAULT gen_random_uuid() PRIMARY KEY,
    created_at timestamp with time zone NOT NULL DEFAULT now(),
    sender_id uuid NOT NULL REFERENCES users(id),
    receiver_id uuid NOT NULL REFERENCES users(id),
    message text NOT NULL,
    deleted boolean DEFAULT false,
    is_read timestamp with time zone
);
我想列出最近收到或发送的所有未删除邮件,以便查看收件箱,我已尝试此查询:

SELECT m.*, 
    sender.username AS sender_username,
    sender.avatar AS sender_avatar, 
    receiver.username AS receiver_username,
    receiver.avatar AS receiver_avatar
FROM messages AS m
INNER JOIN
(
    SELECT
        LEAST(sender_id, receiver_id) AS sender_id,
        GREATEST(sender_id, receiver_id) AS receiver_id,
        MAX(created_at) AS created_at
    FROM messages 
    GROUP BY
        LEAST(sender_id, receiver_id),
        GREATEST(sender_id, receiver_id)
) AS q
    ON LEAST(m.sender_id, m.receiver_id) = q.sender_id AND
       GREATEST(m.sender_id, m.receiver_id) = q.receiver_id AND
       m.created_at = q.created_at       
       INNER JOIN users sender ON m.sender_id = sender.id
       INNER JOIN users receiver ON m.receiver_id = receiver.id
    WHERE m.sender_id = 'bfa46dbd-b260-4b3c-ba16-06e030b1c0c2' 
    OR m.receiver_id = 'bfa46dbd-b260-4b3c-ba16-06e030b1c0c2'
    AND m.deleted = FALSE
    LIMIT 10 OFFSET 0;
我觉得这个查询需要基于数字的ID,而不是UUID。。 没有更简单的方法进行此查询吗

最后,我将编写一个请求,其中必须列出两个用户之间的最后10条消息

对于不希望打开链接的用户,以下是原始数据:

CREATE TABLE users (
    id uuid PRIMARY KEY,
    created_at timestamp with time zone NOT NULL DEFAULT now(),
    updated_at timestamp with time zone NOT NULL DEFAULT now(),
    deleted_at timestamp with time zone,
    username text NOT NULL UNIQUE,
    email text NOT NULL UNIQUE,
    password text NOT NULL,
    avatar text
);


CREATE TABLE messages (
    id uuid PRIMARY KEY,
    created_at timestamp with time zone NOT NULL DEFAULT now(),
    sender_id uuid NOT NULL REFERENCES users(id),
    receiver_id uuid NOT NULL REFERENCES users(id),
    message text NOT NULL,
    deleted boolean DEFAULT false,
    is_read timestamp with time zone
);


INSERT INTO "users"("id","created_at","updated_at","deleted_at","username","email","password","avatar")
VALUES
(E'17c10b11-d895-4d6e-b332-ba29494540ee',E'2021-05-11 15:17:42.233379+04',E'2021-05-11 16:18:03.06961+04',NULL,E'user1',E'user1@yopmail.com',E'xxxx',E'/img/user1.png'),
(E'bf1de12e-1845-4923-b978-9ede5bae6560',E'2021-05-11 15:17:42.233379+04',E'2021-05-11 16:18:03.06961+04',NULL,E'user2',E'user2@yopmail.com',E'xxxx',E'/img/user2.png'),
(E'bfa46dbd-b260-4b3c-ba16-06e030b1c0c2',E'2021-05-11 15:17:42.233379+04',E'2021-05-13 07:39:16.510222+04',NULL,E'user',E'user@yopmail.com',E'xxxx',E'/img/user.png');


INSERT INTO "messages"("id","created_at","sender_id","receiver_id","message","deleted","is_read")
VALUES
(E'1e0316d4-4392-44b0-9928-719a339e3e2e',E'2021-05-13 12:18:16.630658+04',E'bfa46dbd-b260-4b3c-ba16-06e030b1c0c2',E'17c10b11-d895-4d6e-b332-ba29494540ee',E'ping',FALSE,NULL),
(E'f77f7623-e1df-4257-a1b9-89ebb0c38d23',E'2021-05-13 12:18:37.702524+04',E'bfa46dbd-b260-4b3c-ba16-06e030b1c0c2',E'bf1de12e-1845-4923-b978-9ede5bae6560',E'ping',FALSE,NULL),
(E'd196b2ea-84ed-4d56-8b15-e0b9e1ba8212',E'2021-05-13 12:19:03.549715+04',E'bf1de12e-1845-4923-b978-9ede5bae6560',E'bfa46dbd-b260-4b3c-ba16-06e030b1c0c2',E'pong',FALSE,NULL),
(E'3138aa5a-3d48-4123-a078-c43caf692484',E'2021-05-13 12:19:15.016226+04',E'17c10b11-d895-4d6e-b332-ba29494540ee',E'bfa46dbd-b260-4b3c-ba16-06e030b1c0c2',E'pong',TRUE,NULL),
(E'7ab80cd7-821d-4854-81ed-98392edc4ada',E'2021-05-13 19:53:37.59779+04',E'17c10b11-d895-4d6e-b332-ba29494540ee',E'bfa46dbd-b260-4b3c-ba16-06e030b1c0c2',E'pong 2',TRUE,NULL),
(E'88fdf968-ebae-4268-a04d-06a7811f9db7',E'2021-05-13 19:58:12.304655+04',E'bfa46dbd-b260-4b3c-ba16-06e030b1c0c2',E'17c10b11-d895-4d6e-b332-ba29494540ee',E'pin 2',FALSE,NULL);

请添加示例数据,使您的问题更清楚。我不清楚你到底想在这里做什么。嘿,不,我甚至不会打开链接。你的问题应该包括最基本的数据,以使观点得到理解。@TimBiegeleisen好吗?