Mysql 从多个表中选择所有值的组合,保留A列中任何重复项的最大值

Mysql 从多个表中选择所有值的组合,保留A列中任何重复项的最大值,mysql,sql,distinct,Mysql,Sql,Distinct,我正在构建一个结果表,它从数据库中的多个表中提取数据,并包含一个不同的。它一直工作到我添加Case/如果满足条件,何时向结果中添加乘数 (是的,这是我正在构建的一个与神奇宝贝相关的工具,是的,我是一个彻头彻尾的男子汉) 这是我目前得到的代码: SELECT DISTINCT f.Name as 'Fast Move' ,(CASE WHEN Pokemon_Types_And_Moves.Primary_Type = f.Type THEN (f.

我正在构建一个结果表,它从数据库中的多个表中提取数据,并包含一个不同的。它一直工作到我添加Case/如果满足条件,何时向结果中添加乘数

(是的,这是我正在构建的一个与神奇宝贝相关的工具,是的,我是一个彻头彻尾的男子汉)

这是我目前得到的代码:

SELECT DISTINCT f.Name as 'Fast Move'
      ,(CASE WHEN Pokemon_Types_And_Moves.Primary_Type = f.Type
                  THEN (f.Damage * 1.2)
             WHEN Pokemon_Types_And_Moves.Secondary_Type = f.Type
                  THEN (f.Damage * 1.2)
             ELSE f.Damage END) as 'Damage'
      ,f.DPS as 'Fast Move DPS'
      ,c.Name as 'Charged Move'
      ,c.Damage as 'Charged Move Damage'
      ,c.DPS as 'Charged Move DPS'
      ,((f.Cooldown * CEIL(c.Energy_Required / f.Energy_Generated)) + c.Time) as 'Full Cycle Time'
      ,((f.damage * CEIL(c.Energy_Required / f.Energy_Generated)) + c.Damage) as 'Full Cycle Damage'
      ,ROUND(((f.damage * CEIL(c.Energy_Required / f.Energy_Generated)) + c.Damage) / ((f.Cooldown * CEIL(c.Energy_Required / f.Energy_Generated)) + c.Time), 2) as 'Full Cycle DPS'
FROM Fast_Moves f, Charged_Moves c, Pokemon_Types_And_Moves
WHERE (f.Name IN (SELECT Fast_Move_1
                  FROM Pokemon_Types_And_Moves
                  WHERE Pokemon_Name = 'Beedrill')
    OR f.NAME IN (SELECT Fast_Move_2
                  FROM Pokemon_Types_And_Moves
                  WHERE Pokemon_Name = 'Beedrill')
    OR f.NAME IN (SELECT Fast_Move_3
                  FROM Pokemon_Types_And_Moves
                  WHERE Pokemon_Name = 'Beedrill'))
AND (c.Name IN (SELECT Charged_Move_1
                FROM Pokemon_Types_And_Moves
                WHERE Pokemon_Name = 'Beedrill')
  OR c.NAME IN (SELECT Charged_Move_2
                FROM Pokemon_Types_And_Moves
                WHERE Pokemon_Name = 'Beedrill')
  OR c.NAME IN (SELECT Charged_Move_3
                FROM Pokemon_Types_And_Moves
                WHERE Pokemon_Name = 'Beedrill'))
ORDER BY f.Name, c.Name
它返回每一行的副本,除了一行具有“正常”损坏结果,另一行具有所需的倍增结果

我敢肯定问题在于,它在接近查询开始处的“Case”语句中返回了两行,但我就是不知道如何停止它

我试过合并MAX子句等,但到目前为止没有任何效果

目前的结果: (由于我是新用户,目前还不允许添加图片,但结果基本上是:

Fast Move    Damage      Charged Move     Charged Move Damage
Bug Bite     5           Aerial Ace       10
Bug Bite     6           Aerial Ace       12

然后每一个其他组合都是一样的。正如你所看到的,Beedrill正在接收1.2乘数,因此第一行是多余的。(希望这有意义!)

我在这里看到,您使用了3个表,但没有连接条件。这可能是重复的原因。如果不允许任何人添加图片,这将是一个非常好的地方。也许您可以考虑将口袋妖怪类型和移动拆分为两个表-->口袋妖怪移动口袋妖怪移动类型。我觉得您是stuf在数据库表中按列输入过多信息。