如何仅在查询 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);