如何仅在查询 returns 0 行时显示模板结果
how to show template result only when the query returns 0 rows
在某些环境中查询 returns 多行,但在其他环境中查询 returns 0 行。我想以相同的格式在一个输出中知道所有结果,所以我在下面编写了查询。但是,当查询的前一部分 returns 0 行时,它按我的预期工作,但是当它 returns 一些行时,它 returns 一个额外的行。如何在前一个查询returns行时不显示后一个查询结果?
SELECT
id, name
FROM
members
WHERE
some_condition_goes_here
UNION
SELECT 0 as id, 'No results' as name FROM DUAL
实际结果:
id
name
0
No results
id
name
1
John
6
Kate
0
No results
在这种情况下不需要最后一行 (id = 0)。
预期结果:
id
name
0
No results
或
id
name
1
John
6
Kate
这是一种选择;示例基于 Scott 的示例 EMP
table。它根据 DEPTNO
列值选择行。 -5
.
部门没有员工
SQL> select job, ename
2 from emp
3 where deptno = &&par_deptno
4 union all
5 select 'no results', 'no results' from dual
6 where not exists (select null
7 from emp
8 where deptno = &&par_deptno);
Enter value for par_deptno: 10
JOB ENAME
---------- ----------
MANAGER CLARK
PRESIDENT KING
CLERK MILLER
SQL> undefine par_deptno
SQL> /
Enter value for par_deptno: -5
JOB ENAME
---------- ----------
no results no results
SQL>
您可以使用包装原始查询的 CTE
with cte as (
SELECT
id, name
FROM
members
WHERE
some_condition_goes_here
)
SELECT id, name
FROM cte
UNION
SELECT 'no results' as id, 'no_results' as name
FROM DUAL
WHERE not exists( select 1 from cte);
在某些环境中查询 returns 多行,但在其他环境中查询 returns 0 行。我想以相同的格式在一个输出中知道所有结果,所以我在下面编写了查询。但是,当查询的前一部分 returns 0 行时,它按我的预期工作,但是当它 returns 一些行时,它 returns 一个额外的行。如何在前一个查询returns行时不显示后一个查询结果?
SELECT
id, name
FROM
members
WHERE
some_condition_goes_here
UNION
SELECT 0 as id, 'No results' as name FROM DUAL
实际结果:
id | name |
---|---|
0 | No results |
id | name |
---|---|
1 | John |
6 | Kate |
0 | No results |
在这种情况下不需要最后一行 (id = 0)。
预期结果:
id | name |
---|---|
0 | No results |
或
id | name |
---|---|
1 | John |
6 | Kate |
这是一种选择;示例基于 Scott 的示例 EMP
table。它根据 DEPTNO
列值选择行。 -5
.
SQL> select job, ename
2 from emp
3 where deptno = &&par_deptno
4 union all
5 select 'no results', 'no results' from dual
6 where not exists (select null
7 from emp
8 where deptno = &&par_deptno);
Enter value for par_deptno: 10
JOB ENAME
---------- ----------
MANAGER CLARK
PRESIDENT KING
CLERK MILLER
SQL> undefine par_deptno
SQL> /
Enter value for par_deptno: -5
JOB ENAME
---------- ----------
no results no results
SQL>
您可以使用包装原始查询的 CTE
with cte as (
SELECT
id, name
FROM
members
WHERE
some_condition_goes_here
)
SELECT id, name
FROM cte
UNION
SELECT 'no results' as id, 'no_results' as name
FROM DUAL
WHERE not exists( select 1 from cte);