Предложение SQL IN - Возможность пустого набора

Я пытаюсь что-то вроде следующего

SELECT * FROM tbl WHERE col IN (SELECT col1 FROM tbl1)

Однако когда SELECT col1 FROM tbl1 не возвращает результатов, я хочу отобразить все результаты из таблицы

Что-то вроде этого

IF(SELECT col1 FROM tbl1)
SELECT * FROM tbl WHERE col IN (SELECT col1 FROM tbl1)
ELSE
SELECT * FROM tbl

2 ответа

Решение

Можете добавить NOT EXISTS() заявление. Хотя это решение не будет эффективным для больших наборов данных, поэтому для более эффективного метода вы можете использовать PL/SQL

SELECT * FROM tbl 
WHERE col IN(SELECT col1 FROM tbl1)
   OR NOT EXISTS(SELECT 1 FROM tbl1)

Альтернативное и немного более эффективное решение может быть:

Case when (select Count(*) from tbl1)>0
Then
SELECT * FROM tbl WHERE col IN (SELECT col1 FROM tbl1)
ELSE
SELECT * FROM tbl

У меня была аналогичная проблема с созданием SQL в JAVA. Где следующее решило мою проблему.

query ="SELECT * FROM tbl " 
+ "WHERE (col IN (:PARAMLIST) "
+ "OR (:PARAMLIST) IS NULL)
Другие вопросы по тегам