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

标签 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 是否有多个实例,我只希望每个标识符有一个结果。

最佳答案

没有看到输出示例,很难说。但是,您是否尝试过将简单的 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

关于mysql - 如何使用两个内部联接修改此查询,以使其停止提供重复结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14658033/

相关文章:

python - 在 pandas 数据框中查找频繁用户

mysql - 如何在使用 MySQL 别名的查询中使用假名?

php - 从数据库获取数据并与用户输入进行比较

PHP Mysql 搜索页面

c# - 按 id 对 List<T> 中的对象进行分组,并按每个对象的 duplicateCount 对列表进行排序

mysql - 使用案例查找百分比 - SELECT CASE 子查询

mysql - 在 MySQL 中使用子查询进行更新

php - 使用 PHP 将日期添加到 MySQL

mysql - 从sqlite3切换到mysql后ActiveRecord::ConnectionNotEstablished

mysql - 无法累加和 `COUNT(*)`