web-dev-qa-db-ja.com

異なる値に対して同じ列を2回選択する

このようなテーブルがあります。

event_id  pair  versus  score
       1     1      11    100
       1     1      12      0
 ...
       1    11       1      0
       1    12       1     50

次に、同じ結果行で特定のペアの両方のスコアを取得します。お気に入り;

event_id pair versus score1 score2
       1    1     11    100      0
       1    1     12      0     50

何か案は?

1
Sinan

あなたが常にペアを持っていると仮定すると、以下はあなたに望ましい結果を与えるはずです:

SELECT a.event_id ,a.pair,a.versus,
a.score as score1, b.score as score2
FROM table_name a
INNER JOIN table_name b on
(a.event_id = b.event_id and b.pair =a.versus and b.versus=a.pair and a.pair<b.pair)

サイドノート。
1。テーブルにサロゲート主キー列があることは理にかなっています。
2。ペアIDとして機能する列がもう1つある場合、クエリはかなりクリアに見えます(つまり、1-11と11-1の両方が同じpair_identifierを共有します)。
3。 a.pair<b.pair結果セットの重複を避けるために追加されました

4
a1ex07