2016-12-09 3 views
0

a_player1_nameとb_player1_nameの両方を知りたい場合は、これをどのように変更できますか?MySQLデータベースでケースを選択し、1つではなく2つの値を取得する

これは最初に見つかる値を返します。つまり、a_player1_nameまたはb_player1_nameのいずれかであるが、両方ではない。両方とも必要です。

chart_matches.a_player1_id = user_list.idの場合、a_player1_nameはuser_list.player_nameにする必要があります。

chart_matches.b_player1_id = user_list.idの場合、b_player1_nameはuser_list.player_nameにする必要があります。

ご協力お願いいたします。

SELECT case user_list.id 
      when chart_matches.a_player1_id 
      then user_list.player_name 
     end AS a_player1_name 

     , case user_list.id 
      when chart_matches.b_player1_id 
      then user_list.player_name 
     end AS b_player1_name 

FROM chart_matches 
    , all_lists 
    , user_list 

WHERE chart_matches.chart_id = 106 
     AND ((chart_matches.a_team_id = all_lists.id AND chart_matches.a_player1_id = user_list.id) 
     OR (chart_matches.b_team_id = all_lists.id AND chart_matches.b_player1_id = user_list.id)) 
+2

これらの列名は、読みにくいです。質問を編集して列と表の名前を簡略化すると、これでもっと役立つかもしれません... – WillardSolutions

+0

今私は私のベストを尽くしました:) – xms

答えて

0

あなただけ集計あなたの結果(下記のバージョンでMAX()関数に注意してください)にしたいように見えます。

オリジナルは2 のレコード(各プレーヤーに1つ)を取得します。したがって、レコードを集約する必要があります。このMAX()では、特定のプレーヤーの一致するレコードがのレコードの値を保持しています。

SELECT max(case user_list.id 
      when chart_matches.a_player1_id 
      then user_list.player_name 
      else null 
     end) AS a_player1_name 

     , max(case user_list.id 
      when chart_matches.b_player1_id 
      then user_list.player_name 
      else null 
     end) AS b_player1_name 

FROM chart_matches 
    , all_lists 
    , user_list 

WHERE chart_matches.chart_id = 106 
     AND chart_matches.a_team_id = all_lists.id 
     AND (chart_matches.a_player1_id = user_list.id OR chart_matches.b_player1_id = user_list.id) 
+0

ありがとう、しかしそれは仕事をしません。多分私の質問は間違っていた。私はその部分を編集しましたので、一度見てください。 – xms

+0

id = chart_matches.a_player1_idのuser_listのレコードとid = chart_matches.b_player1_idのuser_listのレコードの2つのレコードが返されます。上記のクエリが実際に返すものを確認できますか? MAX()を使わないで実行すると、 "a" not-nullと "b" null、 "a" nullと "b" not-nullの2つ目のレコードがあるようです。あなたは何を見ますか? – SlimsGhost

+0

a_player1_nameは間違っていますが、b_player1_nameは正しいと思います。 – xms

関連する問題