如何使用两个内部联接修改此查询,以便它停止提供重复的结果?

时间:2013-02-02 02:35:21

标签: mysql group-by subquery inner-join

编辑:我会按原样留下帖子,但我真正需要完成的工作需要重新发布。我没有很好地解释这个问题。在以相当不同的起点再次尝试之后,我能够获得我需要的查询。这解释为here

原始问题: 我遇到了麻烦。我查看了类似的线程,我无法找到特定于此查询的解决方案。数据库非常庞大,group by似乎极大地放慢了速度。

问题是我得到了重复的结果。这是我的查询导致重复:

SELECT 
  itpitems.identifier, 
  itpitems.name, 
  itpitems.subtitle, 
  itpitems.description, 
  itpitems.itemimg, 
  itpitems.mainprice, 
  itpitems.upc, 
  itpitems.isbn, 
  itpitems.weight, 
  itpitems.pages, 
  itpitems.publisher, 
  itpitems.medium_abbr, 
  itpitems.medium_desc, 
  itpitems.series_abbr, 
  itpitems.series_desc, 
  itpitems.voicing_desc,
  itpitems.pianolevel_desc,
  itpitems.bandgrade_desc,
  itpitems.category_code,
  itprank.overall_ranking,
  itpitnam.name AS artist,
  itpitnam.type_code 
FROM itpitems 
  INNER JOIN itprank ON ( itprank.item_number = itpitems.identifier ) 
  INNER JOIN itpitnam ON ( itpitems.identifier = itpitnam.item_number ) 
WHERE mainprice >1

结果实际上并不完全重复。 itpitnam.type_code在其他重复的结果中有不同的结果。

由于在查询结束时添加GROUP BY会对服务器造成太大的压力(它正在搜索大约300,000条记录)我还能做些什么?

这可以重写为子查询吗?我只是无法弄清楚如何消除type_code已更改的第二个实例。

感谢您的帮助和帮助。

我也尝试了SELECT DISTINCT itpitems.identifier,但是它提供了相同的结果并且有重复项(其中type_code是唯一的区别)。我不想要type_code已更改的第二个实例。我只想要每个标识符有一个结果,无论type_code是否有多个实例。

1 个答案:

答案 0 :(得分:4)

没有看到输出的例子,很难说。但是,您是否尝试使用添加到DISTINCT的简单SELECT完全相同的查询?

SELECT DISTINCT itpitems.identifier, itpitems.name, itpitems.subtitle, itpitems.description, itpitems.itemimg, itpitems.mainprice, itpitems.upc, itpitems.isbn, itpitems.weight, itpitems.pages, itpitems.publisher, itpitems.medium_abbr, itpitems.medium_desc, itpitems.series_abbr, itpitems.series_desc, itpitems.voicing_desc, itpitems.pianolevel_desc, itpitems.bandgrade_desc, itpitems.category_code, itprank.overall_ranking, itpitnam.name AS artist, itpitnam.type_code 
FROM itpitems 
INNER JOIN itprank ON ( itprank.item_number = itpitems.identifier ) 
INNER JOIN itpitnam ON ( itpitems.identifier = itpitnam.item_number ) 
WHERE mainprice >1