mysql - 在不同的人之间查找重复的消息
问题描述
我有这个数据库
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 次,我不希望它出现。
解决方案
我们可以尝试以下查询:
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));
此逻辑标记任何出现多次并涉及两个或多个不同发件人或两个或多个不同收件人的消息。
推荐阅读
- python - 从列表中排除特定的第 n 个元素后,如何从列表中获取“最后一个”?
- javascript - 未捕获的 SyntaxError:意外的令牌“导出”火力库
- java - 调用Android中第一个活动相机的函数
- javascript - 如何从 OOBCODE 获取 firebase 令牌和 uid?
- python-3.x - 将条码扫描仪中的数据导入 Sqlite 数据库
- unit-testing - 如何获得货物测试的覆盖范围?
- r - 分析 R 上的趋势标签时无法提取屏幕名称
- python - 创建数组时dtype = np.int和int之间的区别
- python - django server 127.0.0.1:18000 在openx 项目的浏览器上不起作用
- android - 有什么方法可以等待来自 MaterialAlertDialogBuilder 的值?安卓 - 科特林