在我的应用程序之间的消息的一个子集,用户获取特定用户
CREATE TABLE users (
id bigserial PRIMARY KEY,
username varchar(50) NOT NULL
);
可以发送邮件
CREATE TABLE messages (
id bigserial PRIMARY KEY,
from_id bigint NOT NULL REFERENCES users ON DELETE RESTRICT,
body text NOT NULL CHECK (body <> ''),
created_at timestamp(0) NOT NULL DEFAULT LOCALTIMESTAMP(0)
);
给多个收件人
CREATE TABLE message_recipients (
message_id bigint NOT NULL REFERENCES messages ON DELETE CASCADE,
user_id bigint NOT NULL REFERENCES users ON DELETE RESTRICT,
PRIMARY KEY (message_id, user_id)
);
我怎么SELECT
之间的所有消息至少有一个特定的用户子集?如果总共有四个用户{1,2,3,4},并且我指定的用户子集是{1,2,3},那么我如何获得用户1之间的所有消息, 2和3,包括用户1,2,3和4之间的所有用户,排除只有1 & 2或1 & 3或2 & 3之间的任何消息。
注:我提供了an answer below,但什么是更有效的解决方案?
你会考虑指定以不同的方式的目标用户子集,例如通过填充用于此目的的'user_id'表格? –