【发布时间】:2012-01-14 12:26:49
【问题描述】:
这是一个我想了很久的问题。我会尝试通过一个例子来解释,但这是一个普遍的问题。
假设你有两张桌子:
- users,保存用户的名字、姓氏……
- posts,保存用户撰写的帖子,包含标题、文本、...等字段。
现在,假设我想显示过去 24 小时内创建的所有帖子。在此表中,我想显示创建此帖子的用户的名字、姓氏……。查询可能类似于:
SELECT ... FROM posts, users WHERE posts.user_id = users.id AND [last 24 hours]
现在,我的问题。由于一个用户很可能在过去 24 小时内创建了多个帖子,因此我们基本上是在一次又一次地检索他/她的名字、姓氏……。也就是说,上述查询的结果集包含重复数据(但不包含重复行)。
这样做不是更好吗:
- SELECT ... FROM Posts WHERE [过去 24 小时]
- SELECT ... FROM users where id IN(SELECT DISTINCT user_id FROM posts WHERE [last 24 hours])
- 在应用程序级别或 sql 过程中将第一个查询的结果与第二个查询的结果映射,以找出帖子的名字、姓氏…… - 如果标识符(主键) 是某种哈希映射、数组或类似的索引/键。
?
我知道这是一个非常笼统的问题,但欢迎提供任何见解。谢谢!
【问题讨论】:
-
在你的上下文中更好的意思是什么?
标签: sql duplicates duplicate-data duplicate-removal