簡體   English   中英

SQL查詢返回特定列或數據庫中不存在行的情況下的默認值

[英]SQL query to return a particular column or a default value in case of row not existing in the db

我有一個從部門ID獲取員工ID的要求(請考慮一個部門最多只能包含1名員工)

我可以做以下事情:

 Select emp_id from emp where dept_id = 101;

現在,如果該行不存在,我將不會獲得任何價值。

但是,由於我在PL / SQL層中使用此查詢,因此它將引發NO_DATA_FOUND異常(當db中沒有雇員時)

如果數據庫中沒有雇員,您是否可以重構此查詢以返回一些emp_id = -1。

我可以做類似下面的事情(這將導致2條sql查詢,因此效率不高)

 select count(1) INTO temp_count from emp where dept_id = 101; -- or use an exists clause

 if (temp_count != 0)
    Select emp_id from emp where dept_id = 101;

嘗試:

select nvl(min(emp_id),-1) 
  from emp 
 where dept_id = 101;

除了提供的答案以外,還有多種方法可以滿足此要求。

您可以使用DECODECOALESCENULLIF如下所示:

Select COALESCE(emp_id,<default value>) from emp where dept_id = 101;
Select DECODE(emp_id,NULL,<default value>,emp_id) from emp where dept_id = 101;

查看此鏈接與NULL相關的功能以獲取更多示例

如果您使用的是PL / SQL(可能是一個函數),為什么不只處理no_data_found錯誤,而不是隨意使用sql語句並降低效率呢?

例如:

create or replace function get_emp_id (p_dept_id number)
return number
is
  v_emp_id number;
begin
  select emp_id
  into   v_emp_id
  from   emp
  where  dept_id = p_dept_id;

  return v_emp_id;
exception
  when no_data_found then
    return -1;
end get_emp_id;
/

您可以使用此代碼塊解決問題:

select t.emp_id from (select nvl(e.emp_id ,-1) as emp_id from emp e where e.dept_id = 101) t where t.emp_id <> -1

您可以嘗試以下代碼塊:

select case when e.emp_id is null then -1 else e.emp_id end as emp_id from emp e where e.dept_id = 101

您可以使用以下代碼從emp中選擇nvl(emp_id,default_value),其中dept_id = 101; 從emp中選擇DECODE(emp_id,NULL,default_value,emp_id),其中dept_id = 101;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM