这个问题专门针对MySQL,但我试图以标准SQL适用的方式提问。(My)SQL:如果子查询不是空集,返回子查询
语境:我试图确定以下列方式结束日期:是否存在用户输入的开始日期之后另一个起始日期,使用现有的开始日期为结束日期;否则,结束日期应在输入的开始日期后30天。
我已经试过的解决方案是类似以下内容:
SELECT
IF(
EXISTS(
SELECT
DISTINCT start_date
FROM table
WHERE ? < start_date AND
identifier = ?
ORDER BY start_date
LIMIT 1
), (
SELECT
DISTINCT start_date
FROM table
WHERE ? < start_date AND
identifier = ?
ORDER BY start_date
LIMIT 1),
DATE_ADD(?, INTERVAL 30 DAY)
) AS end_date
我的解决方案的工作,但我希望有一个更优雅的,不重复的解决方案。如果子查询存在,则—返回子查询中的值;否则,可能会返回其他内容。
更有效,没有'ORDER BY'语句,你清楚地指出我完全忘记了'MIN()'是一个函数!成功。标记为已接受(主要是因为我不想标记自己的问题的答案,但也因为你是一个更好的解决方案)。 – Mattallurgy