Oracle
是否可以將 CASE 語句嵌套到 WHERE 子句中?
我正在使用 FastAPI 開發應用程序。它包含一個函式,該函式使用此處
sqlalchemy.sql.text
所示的 將兩個變數帶入 SQL 查詢。SELECT ATTR3 FROM TABLE WHERE ATTR1 = TO_NUMBER(:var1) AND (CASE WHEN TO_NUMBER(:var1) NOT IN (1460, 1478, 1481) THEN 'ATTR2 IS NULL' ELSE ATTR2 = TO_NUMBER(:var2) END);
因此,粘貼變數後,SQL 查詢將如下所示
SELECT ATTR3 FROM TABLE WHERE ATTR1 = TO_NUMBER('1460') AND (CASE WHEN TO_NUMBER('1460') NOT IN (1460, 1478, 1481) THEN 'ATTR2 IS NULL' ELSE ATTR2 = TO_NUMBER('000') END);
但是,我收到以下錯誤:
ORA-00905: 缺少關鍵字
所以,現在我想知道如何解決這個問題?以及是否可以將 CASE 語句嵌套到 WHERE 子句中?
m條SQL語句的邏輯如下:
我看過一些相關的主題,但它們沒有幫助。
我不清楚您要做什麼,所以這是一個瘋狂的猜測:
SELECT ATTR3 FROM TABLE WHERE ATTR1 = TO_NUMBER(:var1) AND ((TO_NUMBER(:var1) NOT IN (1460, 1478, 1481) AND ATTR2 IS NULL) OR (TO_NUMBER(:var1) IN (1460, 1478, 1481) AND ATTR2 = TO_NUMBER(:var2)) ;
為了清楚起見,我添加了一些多餘的括號。使用聯合是另一種可能性:
SELECT ATTR3 FROM TABLE WHERE ATTR1 = TO_NUMBER(:var1) AND TO_NUMBER(:var1) NOT IN (1460, 1478, 1481) AND ATTR2 IS NULL UNION SELECT ATTR3 FROM TABLE WHERE ATTR1 = TO_NUMBER(:var1) AND TO_NUMBER(:var1) IN (1460, 1478, 1481) AND ATTR2 = TO_NUMBER(:var2)
添加一個db<>fiddle或與您的文章類似的內容,以及預期的輸出(如果這不能解決您的問題)。