2

我正在尝试类似以下的事情

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
4

3 回答 3

3

您可以添加NOT EXISTS()语句。尽管此解决方案对大量数据集效率不高,但对于更有效的方法,您可以使用PL/SQL

SELECT * FROM tbl 
WHERE col IN(SELECT col1 FROM tbl1)
   OR NOT EXISTS(SELECT 1 FROM tbl1)
于 2016-06-09T07:25:18.687 回答
0

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

query ="SELECT * FROM tbl " 
+ "WHERE (col IN (:PARAMLIST) "
+ "OR (:PARAMLIST) IS NULL)
于 2020-09-08T12:49:35.990 回答
0

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

Case when (select Count(*) from tbl1)>0
Then
SELECT * FROM tbl WHERE col IN (SELECT col1 FROM tbl1)
ELSE
SELECT * FROM tbl
于 2016-06-09T09:21:11.530 回答