我花了很多很多时间试图弄清楚这一点。所以我的查询在不同的mysql版本上给出了不同的结果。导致我的问题。到目前为止,我发现自 MySQL 5.6 以来,子查询中的 order by 无法识别。这似乎是 5.7 中错误结果的原因。
我想我应该以某种不同的方式从“并且存在”开始整个结束,但我不知道如何。
我已经在 3 台不同的服务器上使用相同的数据库对此进行了测试。一个 5.5(有效),两个 5.7(无效)。
我的查询:有效:5.5,无效:5.6(?),5.7
SELECT
Sum(P) as games
FROM(SELECT gameday, league, home, season, id, 1 P
FROM games
UNION ALL
SELECT gameday, league, away, season, id, 1
FROM games) as tot, clubs c WHERE tot.home=c.id AND c.id=1 AND
tot.league<=2 AND tot.season=2010
AND EXISTS
(select if(e.event<10,1,0) as first from
(select * from events
where event<=2 or event=9 or event=10 or event=11 or event=13
order by event_time asc) as e
where e.game=tot.id group by e.game having first>0)
有任何想法吗?谢谢你。
编辑:
事件可以是 1,2,9,10,11 或 13
我想计算第一个事件<10的游戏。游戏的第一个事件由 event_time 决定。
这有道理吗?
编辑2:
事件表中的列
- id (primary, auto_increment)
- game
- player
- event
- event_time