SQL查询 - 将行与选定列组合[MySQL]

时间:2015-03-25 21:26:28

标签: mysql sql

我有下表:

Game | Name | Result | Stage
  1      A       W      F
  1      B       L      0
  2      C       L      F
  2      D       W      0
  3      E       L      0
  3      F       W      0

我正在寻找的输出:

Game | Name | Result | Stage
  1      A       W      F
  2      D       W      F

我只想从F阶段的结果中看到获胜者(W)。

我可以通过连接(这不是很快)来做到这一点:

SELECT *
FROM (
    SELECT *
    FROM MyTable
    WHERE Stage = 'F'
  ) AA
  JOIN MyTable
    ON AA.Game = MyTable.Game AND AA.Result <> MyTable.Result

..但我想知道是否有更简单,更有效的方法。另外,这需要我之后再进行一些过滤。

提前致谢!

5 个答案:

答案 0 :(得分:3)

要在没有自连接或等效的情况下执行此类作业,您可能希望使用MySQL不支持的SQL窗口函数。您正在使用的联接并不是太糟糕,但这会更简单一些:

SELECT
  players.Game AS Game,
  players.Name AS Name,
  'W' AS Result,
  'F' as Stage
FROM
  MyTable stage
  JOIN MyTable players
    ON stage.Game = players.Game
WHERE
  stage.stage = 'F'
  AND players.result = 'W'

答案 1 :(得分:0)

“仅来自F阶段的获奖者”只需要:

SELECT * FROM MyTable WHERE stage="F" and result="W";

您自己的结果示例也会显示名称“D”,这不是F阶段的赢家。

答案 2 :(得分:0)

如果您只想从F阶段的结果中看到获胜者(W),您就不需要加入。以下陈述将起作用:

SELECT * FROM MyTable where Stage='F' AND Result= 'W'

答案 3 :(得分:0)

您可能需要子查询:

SELECT
  *
FROM
  MyTable
WHERE
  Result = 'W'
  AND Game IN (SELECT Game FROM MyTable WHERE Stage = 'F')

答案 4 :(得分:0)

SELECT x.Game
     , y.Name
  FROM my_table x
  JOIN my_table y
    ON y.game = x.game
   AND y.result = 'w'
 WHERE x.stage = 'f';