oracle - oracle 查询 if else
问题描述
下面的查询如何在 oracle 数据库中处理,我在 Toad 中尝试
Query1 - SELECT T_BASIS_ACCESS_ID FROM ECKERNEL_MCA.T_BASIS_ACCESS WHERE ROLE_ID LIKE 'MCA.GFS.LEAD'
Query2 - SELECT OBJECT_ID, NAME FROM ECKERNEL_MCA.OV_AREA WHERE END_DATE IS NULL AND OBJECT_ID IN
(SELECT DISTINCT REPLACE(REPLACE(REPLACE(ATTRIBUTE_TEXT, '(', '' ),')',''), '''', '')
FROM ECKERNEL_MCA.T_BASIS_OBJECT_PARTITION WHERE T_BASIS_ACCESS_ID IN
(SELECT T_BASIS_ACCESS_ID FROM ECKERNEL_MCA.T_BASIS_ACCESS WHERE ROLE_ID LIKE 'MCA.GFS.LEAD') )
Query3 - SELECT OBJECT_ID, NAME FROM ECKERNEL_MCA.OV_AREA WHERE END_DATE IS NULL
解决方案
试试这个。它应该按照您在评论中指出的方式行事。
我想如果 Query1 从表中返回任何结果,比如记录数为 1+,然后执行 Query2,如果记录为零,则执行 Query 3 if (Query1 > 0) 执行 Query2 否则执行 Query3
--Query 1
with Q_1 as
(SELECT T_BASIS_ACCESS_ID FROM ECKERNEL_MCA.T_BASIS_ACCESS WHERE ROLE_ID LIKE 'MCA.GFS.LEAD')
--Query 2
SELECT OBJECT_ID, NAME FROM ECKERNEL_MCA.OV_AREA WHERE END_DATE IS NULL AND OBJECT_ID IN
(SELECT DISTINCT REPLACE(REPLACE(REPLACE(ATTRIBUTE_TEXT, '(', '' ),')',''), '''', '')
FROM ECKERNEL_MCA.T_BASIS_OBJECT_PARTITION WHERE T_BASIS_ACCESS_ID IN
(SELECT T_BASIS_ACCESS_ID FROM ECKERNEL_MCA.T_BASIS_ACCESS WHERE ROLE_ID LIKE 'MCA.GFS.LEAD') )
--If Query 1 returns anything
WHERE EXISTS (SELECT 1 FROM Q_1)
UNION ALL
--Query 3
SELECT OBJECT_ID, NAME FROM ECKERNEL_MCA.OV_AREA WHERE END_DATE IS NULL
--If Query 1 returns nothing
WHERE NOT EXISTS (SELECT 1 FROM Q_1)
推荐阅读
- vba - Outlook 表单的 VBA
- node.js - 在 axios 调用期间承诺(不断)挂起
- android - Nativescript 7.0 空白 Hello World 应用程序大小 30MB
- laravel - 如何使用每个项目的 Homestead.yaml 文件在 Laravel homestead 中将 MYSQL 版本 8 更改为 5.7?
- javascript - 在画布上格式化文本
- python - 当我使用 .apply 时,Jupyter 内核死机
- swiftui - 我们如何在 SwiftUI 中将 ObservedObject 类型的值转换为 Binding?
- ruby-on-rails - 创建操作的自定义 POST 路由不起作用
- javascript - 如何在 View 中使变量成为全局变量?
- c - 每次我尝试使用`clang -Weverything`进行编译时,都会收到警告“包含位置'/usr/local/include'对于交叉编译不安全”