sql - 有没有一种方法可以让我在测试其中一个结果时使用 CASE 而不是运行它两次?

标签 sql mysql code-reuse

有没有一种方法可以使用 CASE WHEN 测试中的值作为其结果之一,而无需将 select 语句写出两次(因为它可能又长又乱)?例如:

 SELECT id,
     CASE WHEN (
         (SELECT MAX(value) FROM my_table WHERE other_value = 1) IS NOT NULL
     )
     THEN (
         SELECT (MAX(value) FROM my_table WHERE other_value = 1
     ) 
     ELSE 0
 END AS max_value
     FROM other_table

有没有一种方法可以将第一次运行 SELECT 语句(用于测试)的结果也用作 THEN 值?我尝试在第一个 SELECT 之后使用“AS max_value”,但它给了我一个 SQL 错误。

更新:糟糕,正如 Tom H. 所指出的,我忘记了我原来问题中的“IS NOT NULL”。

最佳答案

您的语句是否运行?它不是 CASE 语句中的 bool 表达式。如果不使用 bool 值,MySQL 会默认检查 NULL 值吗?

我认为这可能是您正在寻找的:

SELECT
     id,
     COALESCE(
     (
          SELECT
               MAX(value)
          FROM
               My_Table
          WHERE
               other_value = 1
     ), 0) AS max_value
FROM
     Other_Table

关于sql - 有没有一种方法可以让我在测试其中一个结果时使用 CASE 而不是运行它两次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/854747/

相关文章:

sql - 向oracle查询添加 'distinct'关键字会无故抹杀查询性能

mysql - JIRA : Issue status count for the past x (i. e 30) 天

mysql - 使用外键连接表

mysql - 从数据库中选择时如何忽略空白值?

java - 如何组织和共享实用程序库/类(不是代码片段)

MySQL:返回结果及其顺序

php - Zend 数据库优先考虑Where 语句

php - 求每个学生占所有出勤率的问题

gradle - 如何在 Gradle 中重用任务配置?

java - Google App Engine 跨项目代码重用