#sqlite #select #if-statement
#sqlite #выберите #if-оператор
Вопрос:
В моей базе данных есть следующие таблицы:
sessions measurements
-------- ------------
id id
etc. session_id
etc.
Я хочу сделать что-то вроде
SELECT * FROM sessions IF
(measurements HAS MORE THAN 0 RESULTS WHERE session_id=X)
Возможен ли такой запрос в sqlite?
С наилучшими пожеланиями
Ответ №1:
Не уверен, существует ли поддержка SQLite, поэтому я предоставил две альтернативы:
SELECT *
FROM sessions S
WHERE EXISTS (SELECT 1 FROM measurements WHERE session_is = S.id)
или
SELECT *
FROM sessions S
WHERE (SELECT COUNT(*) FROM measurements WHERE session_is = S.id) > 0
Комментарии:
1.
EXISTS
очевидно, что лучше, и да, SQLite поддерживает это .2. @9000 — конечно, рад слышать, что это поддерживается.
3. В
… EXISTS (SELECT 1 FROM …)
форме, еслиsession_id
она не уникальна, рассмотрите возможность добавленияLIMIT 1
во внутреннююSELECT
. (Я не знаю, насколько хорош оптимизатор запросов; если это глупо,LIMIT
значительно сократит объем работы, необходимый для получения результатов.)
Ответ №2:
Это сделает это:
select * from sessions where (select count(*) from measurements where session_id=X)>0