MySQL查询永不返回

时间:2014-02-01 20:33:30

标签: 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;

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

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

'大师'包含球员姓名,身高,体重(BMI)。

'击球'房子HR。

'外观'包括最初玩的游戏,在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;

1 个答案:

答案 0 :(得分:2)

我的猜测是你的查询问题是每个玩家多次出现(出场)和蝙蝠很多次。假设一名球员在100场比赛中击球1000次。然后连接 - 正如你所写的那样 - 将为该播放器提供100,000行。

这只是猜测,因为您没有提供样本数据来验证这是否是问题。

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

相关问题