Sqlite - условный SELECT? - PullRequest
       2

Sqlite - условный SELECT?

3 голосов
/ 15 ноября 2011

У меня есть таблица с языками.

Я хотел бы сделать запрос, который получает строки с указанным языком, но если он не возвращает никаких данных - с языком по умолчанию.

Возможно ли это сделать в одном запросе?

ОБНОВЛЕНИЕ:

Моя таблица: Языковые поля:

id - (первичный ключ, уникальный),

lang - (текст, не уникальный),

content - (текст, не уникальный).

и мой текущий запрос:

SELECT * FROM Languages WHERE (id='1') AND (lang = 'es') 

Как я упоминал ранее, если приведенный выше запрос ничего не даст, я бы хотел получить результаты из языка по умолчанию:

SELECT * FROM Languages WHERE (id='1') AND (lang = 'en') 

'en' - язык по умолчанию в этом примере.

Ответы [ 4 ]

4 голосов
/ 15 ноября 2011

Примерно так:

(SELECT CASE
    WHEN ((SELECT ID FROM table WHERE language = specified language) IS NULL)
    THEN
      default language
    ELSE
      specified language
    END);

Он вернет желаемый язык на основе результата подзапроса.Включите это в предложение WHERE вашего окончательного запроса.

2 голосов
/ 15 ноября 2011
SELECT *
FROM lang_tbl
WHERE lang_tbl.name = "search_lang" OR lang_tbl.name = "default_lang"
ORDER BY lang_tbl.name = "search_lang" DESC
LIMIT 1;
1 голос
/ 15 ноября 2011

Взаимодействие по логике с ответом yko позволяет отделить определение используемого языка, а затем возвращает все строки для этого языка:

 SELECT * FROM languages WHERE id = '1' AND lang IN
   (SELECT lang FROM languages WHERE id = '1' AND lang IN ('es', 'en')
    ORDER BY lang = 'es' LIMIT 1)
0 голосов
/ 15 ноября 2011

В соответствии с вашим ограничением первичного ключа, обе строки не будут иметь одинаковое значение идентификатора (1 в вашем примере), поэтому передача WHERE id='1', вероятно, ваша проблема.Если никакие две строки не имеют одинаковое значение lang, вы можете полностью пропустить предложение id, например:

SELECT * FROM Languages WHERE lang='en'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...