Oracle

在 Oracle DB 中應用條件語句

  • June 15, 2022

在 Oracle DB 中有三個表,見下文。

表:“人” 人們

表:“狗” 小狗

表:“貓” 貓

這是一個要測試的數據的小提琴:http ://sqlfiddle.com/#!4/d7cb4

根據來自*‘People’*表的查詢結果,我如何繼續執行不同的查詢以進一步從 *‘Dogs’‘Cats’*請求數據。

簡單地說我需要根據初始/主要查詢的答案執行相應的查詢。這是我嘗試過的(顯然不起作用):

<!-- language: sql -->

WITH CONDITION_CHECK AS (
 SELECT ADORE
 FROM PEOPLE
 WHERE ADORE = 'dog' --here I will put my variable
)

SELECT
 CASE 
   WHEN CC.ADORE = 'dog' THEN (SELECT * FROM DOGS)
   WHEN CC.ADORE = 'cat' THEN (SELECT * FROM CATS)
   ELSE NULL
 END
FROM CONDITION_CHECK AS CC

在 Oracle DB 中設置條件語句的最常用方法是什麼?以及如何執行它?

我看過IF-THEN-ELSE Statement,但我不太了解。


參考:

根據“人”表中的查詢結果,我如何繼續執行不同的查詢以進一步從“狗”或“貓”請求數據。

不應該

這兩個表結構(如圖所示)是相同的,這表明它們應該是一個帶有附加“類型”欄位的單個表,以辨識哪個是哪個(啊;您**已經擁有該欄位)。

“Table-per- Thing ”模型幾乎總是在某個時候崩潰。

如果您正在執行 MySQL,那麼您最多只能擁有大約60種 Pet,因為這是您在任何單個查詢中可以擁有的最大表數!

此外,它使這樣的事情變得非常複雜。

正如您已經被告知的那樣,數據模型是錯誤的。


無論如何,這就是你可能會嘗試做的事情。

樣本數據:

SQL> with
 2  people (id, name, adore) as
 3    (select 1, 'Stone' , 'dog' from dual union all
 4     select 3, 'Bridge', 'cat' from dual
 5    ),
 6  dogs (id, type, breed) as
 7    (select 1, 'dog', 'dobermann' from dual union all
 8     select 2, 'dog', 'border collie' from dual union all
 9     select 3, 'dog', 'labrador retriever' from dual
10    ),
11  cats (id, type, breed) as
12    (select 1, 'cat', 'persian cat' from dual union all
13     select 2, 'cat', 'bengal cat' from dual
14    ),
15  --

查詢從這裡開始;由於兩個 pets 表具有相同的描述(列的含義及其數據類型),您可以將它們合併,然後將這樣的 CTE 加入people表。

您說您將adore值作為參數傳遞;我認為這是錯誤的;你會從桌子上select adore通過adore嗎?你已經知道了!這就是為什麼我的查詢改為idpeople表中接受的原因。

16  all_pets as
17    (select * from dogs
18     union all
19     select * from cats
20    )
21  select a.*
22  from all_pets a join people p on p.adore = a.type
23  where p.id = &par_id;
Enter value for par_id: 1

       ID TYP BREED
---------- --- ------------------
        1 dog dobermann
        2 dog border collie
        3 dog labrador retriever

SQL> /
Enter value for par_id: 3

       ID TYP BREED
---------- --- ------------------
        1 cat persian cat
        2 cat bengal cat

SQL>

引用自:https://dba.stackexchange.com/questions/313330