MySQL查询使用CASE选择多列

12 浏览
0 Comments

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语句,但我不确定如何处理多个条件?

提前谢谢。

0
0 Comments

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语句,可以优化查询语句并提高代码的可读性。

0