mysql - 如果另一个查询在 mysql 中获取空值,则运行查询

标签 mysql sql

我想根据时间和日期从 invgatepass 中获取 max no,如果它返回 null,那么我想根据不同的条件运行另一个查询,如果它也无法获取任何数据,那么我想获取 ' 1'。 这是我想要的东西。 但是在COALESCE函数里面,第二个参数是不允许查询的。 有人可以解决这个问题吗? 在检查 php 代码中的条件后,我不想使用两个单独的查询。

SELECT COALESCE(
            MAX(SUBSTRING_INDEX(InwardNo, '-', -1))+1,
            SELECT COALESCE
                    (
                        MAX(SUBSTRING_INDEX(InwardNo, '-', -1))+1,
                        1
                    ) 
                    FROM 
                    invgatepass 
                    WHERE 
                    DATE(CreationDateTime)=CURDATE() 
                        AND  
                    (EXTRACT(HOUR FROM CreationDateTime)) < '17'

            ) 
            AS CODE FROM 
            invgatepass 
            WHERE 
            DATE(CreationDateTime)=DATE_SUB(CURDATE(), INTERVAL 1 DAY)   
            AND  
            (EXTRACT(HOUR FROM CreationDateTime)) >= '17'"

最佳答案

合并函数中允许使用子查询,但子查询必须用大括号括起来。

看看这个演示:http://www.sqlfiddle.com/#!2/fb3d8/2

此查询编译良好,因为所有子查询都包含在大括号中:

SELECT coalesce(
         ( SELECT null ),
         ( SELECT id FROM test WHERE id = 10 ),
         ( SELECT id FROM test WHERE id = 4 ),
         ( SELECT id FROM test WHERE id = 2 )
       ) result
;

这个查询抛出语法错误,因为第二个子查询没有括号:

SELECT coalesce(
         ( SELECT null ),
         SELECT id FROM test WHERE id = 10,
         ( SELECT id FROM test WHERE id = 4 ),
         ( SELECT id FROM test WHERE id = 2 )
       ) result
;

关于mysql - 如果另一个查询在 mysql 中获取空值,则运行查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20299462/

相关文章:

mysql - MySQL如何动态选择频率最高的名字

Python - 我的 MySQL 查询中的错误在哪里?

mysql - 查询中的 GROUP BY

mysql - 如何找到从事完全相同项目的 worker 数量

mysql - 在具有联接表的查询中,如何设置仅影响一行而不影响联接创建的所有行的 where 子句

sql - MongoDB Now > 像 SQL 一样的间隔

mysql - 根据另一个表从一个表中选择条目

mysql - SQL - 连接表

C# MySQL 在 DataReader while 循环中的第二个 DataReader

sql - 如何将 SQL Server 日期时间转换为 UTC Json 格式?