我想要一個如果/存在它回傳“鏈接”值而不是常規輸出的選擇。所以它回傳的不是“1”而是“鏈接”
那可能嗎?
SELECT IF(
EXISTS(
SELECT link FROM modules WHERE module='license'
), 1, '/dashboard/'
)
uj5u.com熱心網友回復:
將聚合與MAX()(或MIN())一起使用:
SELECT COALESCE(MAX(link), '/dashboard/') link
FROM modules
WHERE module = 'license';
如果該特定link不存在modulesthenMAX()將回傳null,在這種情況下COALESCE()將回傳'/dashboard/'。
uj5u.com熱心網友回復:
@forpas 的解決方案是正確的,但MAX(link)如果您的表很大,選擇可能會變慢。我們不需要計算最大值,因為我們只對link滿足條件的存在感興趣。
這是一個更復雜但更快的解決方案:
SELECT COALESCE(t2.link, '/dashboard/')
FROM
(
SELECT 1 AS foo
) t
LEFT JOIN (
SELECT link
FROM modules
WHERE module='license' AND
(NOT (link IS NULL))
LIMIT 0, 1
) t2
ON 1 = 1
解釋:
- 我們離開了一個帶有生成關系的虛擬表,其中包含您需要的鏈接(如果它們存在)
t是一個虛擬表,即使t2是空的也有結果t2如果沒有符合條件的記錄,將有 0 條記錄t2如果至少有一條記錄符合標準,則將包含您需要的所有鏈接- 如果有多個符合條件的記錄并且您都需要它們,那么您可以
LIMIT從t2 - 確保您在
LIMIT找到第一個匹配項時停止搜索,而不是搜索最大值
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/474799.html
標籤:mysql
