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

时间:2013-11-30 11:06:36

标签: 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'"

2 个答案:

答案 0 :(得分:0)

在coalesce函数中允许子查询,但子查询必须括在大括号内。

看看这个演示: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
;

答案 1 :(得分:0)

旁注: 你不需要2 Coalesce:

coalesce ( null, null, 1)  

大致相同
coalesce ( null, coalesce ( null, 1))