單行查詢失敗時傳回預設值
在執行SQL查詢以取得特定資料時,常會遇到沒有對應行的情況存在。為了避免傳回空結果,您可能需要提供預設值。
考慮以下 SQL 語句,該語句檢索流的下一個計劃項目:
SELECT `file`
FROM `show`, `schedule`
WHERE `channel` = 1
AND `start_time` <= UNIX_TIMESTAMP()
AND `start_time` > UNIX_TIMESTAMP()-1800
AND `show`.`id` = `schedule`.`file`
ORDER BY `start_time`
DESC LIMIT 1
如果沒有找到符合的行,則查詢將傳回空結果。但是,為了確保在沒有計劃項目的情況下在串流上播放某些內容,您可以傳回預設值。
實現此目的的一種方法是使用 IFNULL 或 COALESCE 函數。透過將原始查詢包裝在這些函數中,您可以指定在未找到行時將傳回的預設值:
SELECT COALESCE(`file`, 'default.webm')
FROM `show`, `schedule` ...
SELECT IFNULL(`file`, 'default.webm')
FROM `show`, `schedule` ...
但是,當找不到行時,這些嘗試仍然會導致空結果。為了解決這個問題,更有效的技術是使用像 MIN 這樣的聚合函數和 IFNULL:
SELECT IFNULL(MIN(`file`), 'default.webm') `file`
FROM `show`, `schedule`
WHERE `channel` = 1 AND `start_time` <= UNIX_TIMESTAMP()
AND `start_time` > UNIX_TIMESTAMP()-1800 AND `show`.`id` = `schedule`.`file`
ORDER BY `start_time` DESC LIMIT 1
透過使用聚合函數 MIN,可以確保在沒有選擇任何記錄的情況下得到 NULL 結果。然後,該 NULL 值將替換為 IFNULL 提供的預設值。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3