SQL IN 子句 - 空集的可能性
SQL IN Clause - Possibility of Empty Set
我正在尝试如下操作
SELECT * FROM tbl WHERE col IN (SELECT col1 FROM tbl1)
但是,当SELECT col1 FROM tbl1
returns没有结果时,我想显示来自tbl
的所有结果
像这样
IF(SELECT col1 FROM tbl1)
SELECT * FROM tbl WHERE col IN (SELECT col1 FROM tbl1)
ELSE
SELECT * FROM tbl
您可以添加 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
我在 JAVA 中创建 SQL 时遇到了类似的问题。以下内容解决了我的问题。
query ="SELECT * FROM tbl "
+ "WHERE (col IN (:PARAMLIST) "
+ "OR (:PARAMLIST) IS NULL)
我正在尝试如下操作
SELECT * FROM tbl WHERE col IN (SELECT col1 FROM tbl1)
但是,当SELECT col1 FROM tbl1
returns没有结果时,我想显示来自tbl
像这样
IF(SELECT col1 FROM tbl1)
SELECT * FROM tbl WHERE col IN (SELECT col1 FROM tbl1)
ELSE
SELECT * FROM tbl
您可以添加 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
我在 JAVA 中创建 SQL 时遇到了类似的问题。以下内容解决了我的问题。
query ="SELECT * FROM tbl "
+ "WHERE (col IN (:PARAMLIST) "
+ "OR (:PARAMLIST) IS NULL)