簡體   English   中英

Oracle PL/SQL CASE 語句可以包含 SELECT 查詢嗎?

[英]Can Oracle PL/SQL CASE statement include a SELECT query?

我正在嘗試做類似的事情:

CASE
 WHEN number IN (1,2,3) THEN 'Y' ELSE 'N' END;

相反,我想在列表的位置進行查詢,如下所示:

CASE
 WHEN number IN (SELECT num_val FROM some_table) THEN 'Y' ELSE 'N' END;

我似乎無法讓它發揮作用。 此外,這里是查詢的示例。

    SELECT number, (CASE
     WHEN number IN (SELECT num_val FROM some_table) THEN 'Y' ELSE 'N' END) AS YES_NO 
    FROM some_other_table;

是的,這是可能的。 請參閱下面的示例,該示例將執行您的意圖。 不同之處在於它使用EXISTS而不是IN

SELECT a.number, 
       (CASE WHEN EXISTS (SELECT null FROM some_table b where b.num_val = a.number)
             THEN 'Y'
             ELSE 'N'
        END) AS YES_NO 
    FROM some_other_table a;

編輯:我承認:我個人更喜歡其他人給出的答案。

但是,此查詢與其他查詢之間會有所不同,具體取決於您的數據。

如果一個價值number表中的some_other_table你可以有許多匹配項num_val在表some_table ,那么其他的答案將返回重復的行。 這個查詢不會。

也就是說,如果您采用其他人給出的left join查詢,並添加一個group by ,那么您將不會得到重復項。

我建議使用 OUTER JOIN 而不是嘗試在 CASE 表達式中使用子查詢:

SELECT t.NUMBER, 
       CASE
         WHEN s.NUM_VAL IS NOT NULL THEN 'Y'
         ELSE 'N'
       END AS YES_NO
  FROM SOME_OTHER_TABLE t
  LEFT OUTER JOIN SOME_TABLE s
    ON s.NUM_VAL = t.NUMBER

祝你好運。

似乎您只需要加入表格並進行解碼即可。

with x as
(
    select 1 as num from dual
    union
    select 2 as num from dual
    union
    select 3 as num from dual
),
y as 
(
    select 1 as num from dual
    union
    select 2 as num from dual
    union
    select 4 as num from dual
)
select x.num, decode(y.num, null, 'N','Y') as yes_no
from x
left outer join y on (x.num = y.num)

輸出:

NUM YES_NO
1   Y
2   Y
3   N

您可以在 case 語句中使用子查詢:

選擇 case dummy 當 'X' then (select 'TRUE' from dual) else 'FALSE' end TEST from dual;

測試

真的

選擇案例(從雙重選擇'XXX')當'XXX'然后'TRUE'否則'FALSE'結束雙重測試;

測試

真的

暫無
暫無

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

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