mysql - SQL 连接和排序

标签 mysql sql sorting join alias

我有一个运动队成绩的 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/

相关文章:

mysql - 当我更新我的日期归档时没有更新。我正在使用 mysql 数据库

mysql - 使用 Perl 在 MySQL 中插入日期

c++ - 调用 std::stable_sort 时出错?

c - 如何获取整数数组的降序(序数)?

mysql - 意想不到的性格。 (在位置 1093 的 ":"附近)

java - 哪些 Java 集合(和映射)可以按上次访问排序

php - 将值保存为未登录用户的页面(帖子) View ?

php - Pyrocms 2.2 升级数据库错误号 : 1054

sql - SQL如何修改XML中属性的首位?

sql - 你如何阅读 sqlite3 图表/流程图?