gpt4 book ai didi

mysql - SQL 连接和排序

转载 作者:行者123 更新时间:2023-11-30 01:36:15 25 4
gpt4 key购买 nike

我有一个运动队成绩的 MYSQL 表。每个事件或比赛都存储有进球得分值。我想要做的是检索一个有序列表匹配按承认的目标顺序(升序)。

这看起来很简单,直到所讨论的球队是客队:

  • 在这种情况下,我们正在考虑for的目标。

  • 当相关球队是主队时,我们将查看“对手”进球。

我可以编写以下查询:

(SELECT * FROM `matches`,`teams`,`outcomes` 
WHERE `home_team_id`=11 AND `matches`.away_team_id=`teams`.team_id
AND `matches`.score_id=`outcomes`.outcome_id
ORDER BY `against`,`date` DESC LIMIT 0,20)
UNION
(SELECT * FROM `matches`,`teams`,`outcomes`
WHERE `away_team_id`=11 AND `matches`.home_team_id=`teams`.team_id
AND `matches`.score_id=`outcomes`.outcome_id
ORDER BY `for`,`date` DESC LIMIT 0,20)

它有效,但结果集分为两半,我想将结果和失球顺序合并起来,无论球队是主场还是客场。我需要别名才能执行此操作吗?

谢谢。

最佳答案

尝试使用您需要的字段进行 UNION 查询,重命名 for 或 against 字段,以便它们具有相同的名称。然后从此表联合中选择所有内容,并按重命名的字段进行排序:

select * from
((SELECT matches.*, teams.*, outcomes.against as goals
FROM matches,teams,outcomes
WHERE
matches.home_team_id=11
AND matches.away_team_id=teams.team_id
AND matches.score_id=outcomes.outcome_id
)
UNION
(SELECT matches.*, teams.*, outcomes.for as goals
FROM matches,teams,outcomes
WHERE matches.away_team_id=11
AND matches.home_team_id=teams.team_id
AND matches.score_id=outcomes.outcome_id
)) as union_table
order by goals, date desc limit 0,20;

该查询在 MySQL 数据库中完美执行。

关于mysql - SQL 连接和排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16840150/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com