2013-02-04 31 views

回答

2
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 
+0

似乎很好,謝謝!它有點慢嗎? '查詢時間0.114s' – cronoklee

+0

@cronoklee:你有'(script,lang)'索引嗎? – eggyal

+0

我沒有,但我現在做,它更好地工作:'查詢時間0.024s'。非常感謝@eggyal – cronoklee

1

找到的所有記錄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' 
      ) 
     )