這應該相當簡單,但在搜索時找到合適的術語很困難。mySQL選擇優先級 - 選擇一行或另一行(選擇默認或「後備」行)
在下面的查詢中,如果WHERE lang='nl_NL'
什麼也沒有返回,我需要選擇WHERE lang='en'
。換句話說,我想lang=nl_NL
SELECT * FROM international WHERE script='generic' AND (lang = 'nl_NL' OR lang = 'en')
這應該相當簡單,但在搜索時找到合適的術語很困難。mySQL選擇優先級 - 選擇一行或另一行(選擇默認或「後備」行)
在下面的查詢中,如果WHERE lang='nl_NL'
什麼也沒有返回,我需要選擇WHERE lang='en'
。換句話說,我想lang=nl_NL
SELECT * FROM international WHERE script='generic' AND (lang = 'nl_NL' OR lang = 'en')
SELECT * FROM international WHERE script = 'generic' AND lang = CASE
WHEN EXISTS(
SELECT 1
FROM international
WHERE script = 'generic'
AND lang = 'nl_NL'
LIMIT 1
) THEN 'nl_NL'
ELSE 'en'
END
找到的所有記錄WHERE script='generic'
,優先這裏你可以得到指定的結果集的一種方式的示例:
SELECT i.*
FROM international i
WHERE i.lang = 'nl_NL'
OR (i.lang = 'en'
AND NOT EXISTS
(SELECT 1 FROM international d WHERE d.lang = 'nl_NL')
)
這不是不清楚您的問題何時需要應用「script='generic'
」謂詞。
SELECT i.*
FROM international i
WHERE (i.script = 'generic' AND i.lang = 'nl_NL')
OR (i.script = 'generic' AND i.lang = 'en'
AND NOT EXISTS
(SELECT 1
FROM international d
WHERE d.lang = 'nl_NL'
AND d.script='generic'
)
)
似乎很好,謝謝!它有點慢嗎? '查詢時間0.114s' – cronoklee
@cronoklee:你有'(script,lang)'索引嗎? – eggyal
我沒有,但我現在做,它更好地工作:'查詢時間0.024s'。非常感謝@eggyal – cronoklee