MySQL查询使用CASE选择多列
MySQL查询使用CASE选择多列
我有以下正确工作的查询:
SELECT Future.enemy_type, CASE WHEN Future.enemy_type = 'square' THEN Users.color ELSE '' END AS color, CASE WHEN Future.enemy_type = 'square' THEN Users.user_ID ELSE '' END AS ID, CASE WHEN Future.enemy_type = 'headquarters' THEN Users.username ELSE '' END AS username, CASE WHEN Future.enemy_type = 'headquarters' THEN Users.home_lat ELSE '' END AS lat FROM Future LEFT JOIN Users ON Future.user_ID_affected = Users.user_ID WHERE Future.time > 1539503510 AND Future.time <= 1539503512 AND Future.user_ID = 10;
然而,是否有更高效的编写方式?我需要根据条件(例如square或headquarters)选择几个值,但我了解CASE只能返回一个值。然而,每次我想返回一个值时,使用一个新的CASE语句来检查条件似乎效率低下。
一些SO上的人建议对类似的查询使用JOIN语句,但我不确定如何处理多个条件?
提前谢谢。
MySQL查询使用CASE选择多个列的原因是为了在查询结果中根据条件选择不同的列。在给定的查询中,根据Future.enemy_type的值,选择不同的列作为查询结果的一部分。然而,使用IF函数时,查询语句变得冗长且不够优雅。
为了解决这个问题,可以使用CASE语句来选择多个列。CASE语句可以根据条件选择不同的列,并将其作为查询结果的一部分返回。通过使用CASE语句,可以简化查询语句并提高可读性。
以下是使用CASE语句重写的查询语句:
SELECT Future.enemy_type, CASE WHEN Future.enemy_type = 'square' THEN Users.color ELSE '' END AS color, CASE WHEN Future.enemy_type = 'square' THEN Users.user_ID ELSE '' END AS ID, CASE WHEN Future.enemy_type = 'headquarters' THEN Users.username ELSE '' END AS username, CASE WHEN Future.enemy_type = 'headquarters' THEN Users.home_lat ELSE '' END AS lat FROM Future LEFT JOIN Users ON Future.user_ID_affected = Users.user_ID WHERE Future.time > 1539503510 AND Future.time <= 1539503512 AND Future.user_ID = 10;
通过使用CASE语句,可以根据条件选择不同的列,并将其作为查询结果的一部分返回。这样可以避免使用多个IF函数,使查询语句更加简洁和可读。
感谢提问者的问题,通过使用CASE语句,可以优化查询语句并提高代码的可读性。