在我的應用程序之間的消息的一個子集,用戶獲取特定用戶
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'表格? –