MySQL 查询永远不会返回

标签 mysql sql join inner-join

编辑:这个问题已经解决,需要对外观表进行子查询。这是有效的解决方案。

SELECT concat(m.nameFirst, ' ', m.nameLast) as Name, 
   m.playerID as playerID, 
   sum(b.HR) as HR
FROM Master AS m
INNER JOIN Batting AS b
  ON m.playerID=b.playerID
WHERE ((m.weight/(m.height*m.height))*703) >= 27.99
AND m.playerID in (SELECT playerID FROM appearances GROUP BY playerID HAVING SUM(G_1b+G_dh)/SUM(G_All) >= .667)
GROUP BY playerID, Name
HAVING HR >= 100
ORDER BY HR desc;

如果有人熟悉的话,我正在使用 Lahman 棒球统计数据库。

我正在尝试检索所有大型强击一垒手的列表,而我需要的数据分布在三个不同的表中。我这样做的方法是寻找体重指数最低的球员,他们至少有 2/3 的时间花在第一/指定击球手上,并且本垒打次数最少。

“Master”包含玩家姓名、高度、体重(BMI)。

“击球”由人力资源部门负责。

“出场次数”包含首次参加的比赛、DH 参加的比赛以及总比赛数。

所有三个数据库都通过相同的“playerID”值连接。

这是我当前的查询:

SELECT concat(m.nameFirst, ' ', m.nameLast) as Name, 
   m.playerID as playerID, 
   sum(b.HR) as HR
FROM Master AS m
INNER JOIN Batting AS b
  ON m.playerID=b.playerID
INNER JOIN Appearances AS a
  ON m.playerID=a.playerID
GROUP BY Name, playerID
HAVING ((m.weight/(m.height*m.height))*703) >= 27.99 
  AND ((SUM(IFNULL(a.G_1b,0)+IFNULL(a.G_dh,0)))/SUM(IFNULL(a.G_All,0))) >= .667
  AND HR >= 200
ORDER BY HR desc;

这对我来说似乎是正确的,但是当输入时它永远不会返回(永远运行) - 出于某种原因,我认为它与外观表的内部联接有关。我还觉得在“HAVING”子句中组合 m.weight/m.height 存在问题,但涉及聚合时我无法使用“WHERE”。我该怎么办?

感谢您的帮助!

编辑:删除所有条件后,我仍然得到相同(无尽)的结果。这是我更简单的查询:

SELECT concat(m.nameFirst, ' ', m.nameLast) as Name, 
   m.playerID as playerID, 
   sum(b.HR) as HR
FROM Master AS m
INNER JOIN Batting AS b
  ON m.playerID=b.playerID
INNER JOIN Appearances AS a
  ON m.playerID=a.playerID
GROUP BY playerID, Name
ORDER BY HR desc;

最佳答案

我的猜测是,您的查询的问题在于每个球员都出现过多次(出场)并且多次击球。假设一名球员在 100 场比赛中击球 1000 次。然后,连接(如您所写)将包含该玩家的 100,000 行。

这只是一个猜测,因为您没有提供示例数据来验证这是否是问题所在。

解决方案是将 appearancesgames 表预先聚合为子查询(在 playerId 级别),然后将它们连接回来。

关于MySQL 查询永远不会返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21503293/

相关文章:

mysql - 试图获取非对象 Laravel 5.2 的属性

mysql - 在插入语句 MySQL 中选择 ID()

sql - 在一列中查找 n 个最大值

MySQL 双向外键?

sql - "FROM a, b"和 "FROM a FULL OUTER JOIN b"有什么区别?

.net - EntityFramework 包括 vs 连接性能

sql - 使用 JDBC 从多个表中选择时如何识别列?

php - MySQL在多次查询后内存不足

sql - 比较两个表并发现不匹配

php - 从 mySQL 中的 2 个表中选择数据,加入它