如果我想同时了解 a_player1_name 和 b_player1_name,我该如何修改它?
现在返回第一个找到的值。我的意思是,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))
最佳答案
看起来您只是想聚合您的结果(请注意下面版本中的 MAX() 函数)。
您的原始记录将获得 2 条记录 - 每位玩家一条。因此,您必须将记录聚合在一起,并且对于此 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)
关于MySQL数据库,选择大小写,并获取两个值而不是一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41069552/