SQL запрос на объединение двух столбцов в один - PullRequest
3 голосов
/ 25 апреля 2020

У меня есть таблица матчей и результатов, которая выглядит примерно так

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 кажется разумным, но что здесь предпочтительнее? И какой будет запрос?

1 Ответ

4 голосов
/ 25 апреля 2020

кажется вам нужен союз

    select match_id, player1, player2 opponent, player1_score score
    from my_table 
    union all 
    select match_id, player1, player2 , player2_score 
    from my_table 
...