我想根据时间和日期从 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/