SQL IN子句 - 空集的可能性

时间:2016-06-09 07:18:10

标签: oracle plsql in-clause empty-list

我正在尝试类似以下的内容

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

然而,当SELECT col1 FROM tbl1没有返回结果时,我想显示来自tbl的所有结果

像这样的东西

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

3 个答案:

答案 0 :(得分:3)

您可以添加NOT EXISTS()声明。虽然这种解决方案在大型数据集上不会有效,但是对于更有效的方法,您可以使用PL/SQL

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

答案 1 :(得分:0)

另一种更有效的解决方案可能是:

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

答案 2 :(得分:0)

我在JAVA中创建SQL时遇到了类似的问题。以下解决了我的问题的地方。

query ="SELECT * FROM tbl " 
+ "WHERE (col IN (:PARAMLIST) "
+ "OR (:PARAMLIST) IS NULL)