Предложение 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)