Выберите SQLite, если результатов в другой таблице больше n

#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