這個問題專門針對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