首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果另一个查询在mysql中获取空值,则运行查询

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

Stack Overflow用户
提问于 2013-11-30 19:06:36
回答 2查看 1.2K关注 0票数 1

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

代码语言:javascript
复制
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'"
EN

回答 2

Stack Overflow用户

发布于 2013-12-01 01:47:35

允许在coalesce函数内使用子查询,但子查询必须用大括号括起来。

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

这个查询编译得很好,因为所有子查询都用大括号括起来:

代码语言:javascript
复制
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
;

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

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2017-10-14 15:24:15

附注:您不需要2个Coalesce:

代码语言:javascript
复制
coalesce ( null, null, 1)  

大致与

代码语言:javascript
复制
coalesce ( null, coalesce ( null, 1))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20299462

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档