【发布时间】:2020-08-08 21:30:43
【问题描述】:
我有一个比赛和得分表,看起来像这样
match_id | player1 | player2 | player1_score | player2_score |
---------|---------|---------|---------------|---------------|
1 | 1 | 2 | 30 | 50 |
2 | 3 | 1 | 35 | 10 |
3 | 1 | 4 | 40 | 20 |
4 | 2 | 3 | 20 | 25 |
5 | 4 | 2 | 65 | 15 |
6 | 3 | 4 | 10 | 20 |
我想用单列中的分数进行查询
match_id | player | opponent | score |
---------|--------|----------|-------|
1 | 1 | 2 | 30 |
2 | 3 | 1 | 35 |
3 | 1 | 4 | 40 |
4 | 2 | 3 | 20 |
5 | 4 | 2 | 65 |
6 | 3 | 4 | 10 |
1 | 2 | 1 | 50 |
2 | 1 | 3 | 10 |
3 | 4 | 1 | 20 |
4 | 3 | 2 | 25 |
5 | 2 | 4 | 15 |
6 | 4 | 3 | 20 |
这相当于将表中的某些列与其他列连接:
match_id | player | opponent | score |
---------|---------|----------|---------------|
match_id | player1 | player2 | player1_score |
match_id | player2 | player1 | player2_score |
但我不确定合适的操作是什么。 join 是我所知道的唯一一个合并表的操作,但这里似乎是错误的工具。
CONCAT 或 UNION 似乎是合理的,但这里哪个更可取?查询会是什么?
【问题讨论】:
-
您使用的是哪个 DBMS(MySQL、SQL Server、Oracle 等)?
-
您正在寻找
UNION ALL和列别名。是否有必要按照您显示的顺序获得结果?因为这比单纯的 union all 查询要复杂一些。 -
RDBMS 是相关的,因为可能有一些方法可以做到这一点而无需扫描表两次,具体取决于您使用的是哪一个
-
@ThorstenKettner 顺序并不重要。