SQL函数在某些情况下会出错,为什么?

问题描述 投票:0回答:1

我有以下函数,在我们生成数据时,每行都会运行以下函数。如果我在单独的条目上运行该函数,则可以正常工作,但会在编译过程中出错,因此必须有一些行将其中断,但我看不到它的含义。语法或是否存在任何问题?我不是在这里想吗?任何帮助或技巧都将不胜感激

DROP FUNCTION IF EXISTS xx__calc_date;;
CREATE FUNCTION xx_calc_date(date INT, id INT, esId INT)
RETURNS DATE
DETERMINISTIC
BEGIN
    IF date IS NULL OR date = 0 THEN
        RETURN NULL;
    ELSE -- this is where the error lies
        IF(SELECT COUNT(b.TimeSort) FROM Booking b
              WHERE b.BookingId IN (SELECT DISTINCT e.BookingId
                      FROM xx.Events e
                      WHERE e.id = id AND e.esId = esId)
                        AND TimeSort < 86400) > 0
        THEN
            RETURN STR_TO_DATE(date, '%Y%m%d');
        ELSE
            RETURN DATE_ADD(date, INTERVAL 1 DAY);
        END IF;
    END IF;
END;;
sql mariadb stored-functions
1个回答
0
投票

e.id = id始终为真。

在子查询中,您可以忽略表限定用于内部表,而不用于外部。

建议使用EXISTS ( SELECT 1... )代替( SELECT COUNT(*) ... ) > 0 )

该表达式似乎正在执行两次“存在”检查。考虑使用JOIN

© www.soinside.com 2019 - 2024. All rights reserved.