这是我一直想知道的相当长一段时间的问题。我会试着通过一个例子来解释,但这是一个普遍的问题。SQL查询 - 尽量避免结果集中的数据不准确?
说你有两个表:
- 用户,其持有的第一个名字,姓氏,......用户的
- 的帖子,其中包含由用户撰写的帖子,与这些字段标题,文字,...
现在,假设我想显示其已在过去24小时内已创建的所有帖子。在此表中,我想显示创建此帖的用户的名字,姓氏,...。查询可能会是这个样子:
SELECT ... FROM的帖子,用户WHERE posts.user_id = users.id和[过去24小时]
现在,我的问题。由于一个用户很可能在过去的24小时内创建了多个帖子,我们基本上是一次又一次地检索他/她的名字,姓氏......。换句话说,上述查询的结果集包含重复数据(但不包含重复行)。
是不是会好一些:
- SELECT ... FROM帖子WHERE [过去24小时]
- SELECT ... FROM用户其中id IN(SELECT DISTINCT user_ID的帖子中WHERE [最后24小时])
- 将第一个查询的结果与第二个查询的结果在应用程序级别或SQL过程中进行映射,以找出帖子的名字,姓氏...... - 这可以很容易地完成,如果标识符(主键)是某种哈希映射,数组或类似的索引/键。
?
我知道这是一个非常普遍的问题,但任何见解都值得欢迎。谢谢!
什么意思在你的上下文中更好? – EvilTeach 2012-01-14 12:29:52