首页 > 解决方案 > 在不同的人之间查找重复的消息

问题描述

我有这个数据库

CREATE TABLE Users(
uid int PRIMARY KEY,
name text,
phone text
);

CREATE TABLE Messages(
recipient int REFERENCES Users(uid),
sender int REFERENCES Users(uid),
time timestamp NOT NULL,
message text NOT NULL,
PRIMARY KEY (recipient, sender, time)
);

我想查找是否有一条消息在用户之间发送了不止一次。

例如,如果 1 向 5 发送了消息“Hello”,而 4 也向 8 发送了消息,例如,我想打印消息“Hello”。但如果它只发送一次,那么我不想要它。我希望至少重复两次,但要针对不同的用户。如果用户 1 和 5 发送了 2 次,我不希望它出现。

标签: mysql

解决方案


我们可以尝试以下查询:

SELECT message
FROM Messages
GROUP BY message
HAVING
    MIN(LEAST(sender, recipient)) <> MAX(LEAST(sender, recipient)) OR
    MIN(GREATEST(sender, recipient)) <> MAX(GREATEST(sender, recipient));

此逻辑标记任何出现多次并涉及两个或多个不同发件人或两个或多个不同收件人的消息。


推荐阅读