我有下表:
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
..但我想知道是否有更简单,更有效的方法。另外,这需要我之后再进行一些过滤。
提前致谢!
答案 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';