Sql 如何根据其他行中的值选择行

Sql 如何根据其他行中的值选择行,sql,mysql,Sql,Mysql,我有一个充满运动成绩的数据库。我想根据之前结果的一些特点选择一些结果。以下是数据库结构: CREATE TABLE `results` ( `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY , `date` DATETIME NOT NULL , `home_score` INT NOT NULL , `away_score` INT NOT NULL , `home_team_id` INT NOT NULL ,

我有一个充满运动成绩的数据库。我想根据之前结果的一些特点选择一些结果。以下是数据库结构:

CREATE TABLE `results` (
    `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
    `date` DATETIME NOT NULL ,
    `home_score` INT NOT NULL ,
    `away_score` INT NOT NULL ,
    `home_team_id` INT NOT NULL ,
    `away_team_id` INT NOT NULL
);
所以我想做一些查询,比如“查找一支球队在前两场主场比赛中获胜的结果”——也就是说,按日期排序的特定主场球队id,然后选择前两行主场得分>客场得分的每一行

我知道这有点复杂,所以任何关于如何解决这个问题的建议都将受到极大的赞赏。我目前有一个PHP版本(选择所有行,然后执行这种类型的查询),但性能非常慢,而且它使用了大量内存(数据库中有20000多行)


编辑:谢谢你给出了几个简洁的答案。不过,理想情况下,我希望能够在所有列上运行查询,而不仅仅是查看W、d或L。更复杂的示例是“查找所有结果,其中主队在之前的五场主场比赛中均以至少两个进球获胜,而客队在客场比赛中均以至少一个进球失利。”

如果您想让它运行良好,您应该链接表中的连续结果,例如,有一个
prev\u result\u id
列,您可以在插入新结果时将该列设置为上一个结果。这样,您可以按以下方式解决问题:

SELECT * FROM
    (SELECT * FROM results WHERE home_team_id = ID ORDER BY date DESC LIMIT 1) r1
    INNER JOIN results r2 ON r2.id = r1.prev_result_id
    WHERE r1.home_score > r1.away_score AND r2.home_score > r2.away_score
编辑。 为了进一步改进这一点,您还可以使用
next\u result\u id
字段(即索引字段),并为最后一个结果设置空值(因为还没有下一个结果)。这样,您就可以在FROM中取消子查询,因为您根本不必按日期排序:

SELECT * FROM results r1 INNER JOIN results r2 ON r2.id = r1.prev_result_id
WHERE r1.home_team_id = ID AND r1.next_result_id IS NULL
AND r1.home_score > r1.away_score AND r2.home_score > r2.away_score

如果您想查找所有在之前的比赛中获胜的球队,这是一个特别好的方法,因为现在您只需从where子句中省略
r1.home\u team\u id=id
,它应该给每一个赢得前两场比赛的球队一行。

取决于你需要的全范围的查询,我可以考虑去变性。 e、 g.在团队表中添加列,如

home_performance = 'WWDLWW'
away_performance = 'WWLLWL'
overall_performance = 'WWWWDLLLWWWL'
然后,可以通过这样做来回答诸如赢得最近2场主场比赛之类的特殊问题

home_performance LIKE '%WW'
或连续赢4将是总体性能,如“%ww%”

可以使用
GROUP\u CONCAT