查詢在某些環境中回傳多行,但在其他環境中回傳 0 行。我想知道所有結果都以相同的格式輸出,所以我寫了下面的查詢。但是,當查詢的前一部分回傳 0 行時,它按我的預期作業,但是當它回傳一些行時,它回傳一個額外的行。前一個查詢回傳行時如何不顯示后一個查詢結果?
SELECT
id, name
FROM
members
WHERE
some_condition_goes_here
UNION
SELECT 'no results' as id, 'no_results' as name FROM DUAL
實際結果:
| ID | 名稱 |
|---|---|
| 0 | 沒結果 |
| ID | 名稱 |
|---|---|
| 1 | 約翰 |
| 6 | 凱特 |
| 0 | 沒結果 |
在這種情況下,不需要最后一行 (id = 0)。
預期成績:
| ID | 名稱 |
|---|---|
| 0 | 沒結果 |
或者
| ID | 名稱 |
|---|---|
| 1 | 約翰 |
| 6 | 凱特 |
uj5u.com熱心網友回復:
這是一種選擇;示例基于 Scott 的示例EMP表。它根據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>
uj5u.com熱心網友回復:
您可以使用包裝原始查詢的 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);
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/422488.html
標籤:
上一篇:使用條件SQL從現有列創建新列
下一篇:使用計數和按欄位排序優化子查詢
