我有以下函数,在我们生成数据时,每行都会运行以下函数。如果我在单独的条目上运行该函数,则可以正常工作,但会在编译过程中出错,因此必须有一些行将其中断,但我看不到它的含义。语法或是否存在任何问题?我不是在这里想吗?任何帮助或技巧都将不胜感激
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;;
e.id = id
始终为真。
在子查询中,您可以忽略表限定用于内部表,而不用于外部。
建议使用EXISTS ( SELECT 1... )
代替( SELECT COUNT(*) ... ) > 0 )
该表达式似乎正在执行两次“存在”检查。考虑使用JOIN
。