Oracle:如何在选择语句中使用 if then

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/4395894/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-18 22:08:50  来源:igfitidea点击:

Oracle : How to use if then in a select statement

oracleconditional

提问by Nick

select ma.TITLE,ma.ID as aid,ur.USER_ID  
from LEO_MENU_ACTIVITY_RELATION mr 
inner join LEO_MENU_MASTER mm on mm.ID=mr.MENU_ID 
INNER join LEO_MENUACTIVITY ma on mr.ACTIVITY_ID=ma.ID
LEFT OUTER JOIN LEO_USER_RIGHTS ur on ma.ID=ur.MENU_RELATION_ID and ur.MENU_ID=mm.ID and ur.USER_ID='141' 
where mm.ID='1'  
UNION (SELECT 
       'List' as TITLE, 
        1 as ID, 
        case (WHEN ur.MENU_RELATION_ID=1 THEN NULL ELSE USER_ID END)as USER_ID 
     from 
LEO_USER_RIGHTS)

In the UNION i want perform a conditional select like if ur.MENU_RELATION_ID=1 then the USER_ID should be selected as NULL otherwise the the original value from the 'LEO_USER_RIGHTS' table must be retrieved.

在 UNION 中,我想执行一个条件选择,比如 ur.MENU_RELATION_ID=1 那么应该将 USER_ID 选为 NULL,否则必须检索“LEO_USER_RIGHTS”表中的原始值。

How can i do this ? Please help

我怎样才能做到这一点 ?请帮忙

Krishnik

克里什尼克

回答by hol

If you want to combine in a UNION something based on the first table I think you can only do it by repeating the whole thing like this:

如果你想在 UNION 中结合基于第一个表的东西,我认为你只能通过像这样重复整个事情来做到这一点:

select ma.TITLE,ma.ID as aid,ur.USER_ID  
from LEO_MENU_ACTIVITY_RELATION mr 
inner join LEO_MENU_MASTER mm on mm.ID=mr.MENU_ID 
INNER join LEO_MENUACTIVITY ma on mr.ACTIVITY_ID=ma.ID
LEFT OUTER JOIN LEO_USER_RIGHTS ur on ma.ID=ur.MENU_RELATION_ID and ur.MENU_ID=mm.ID and ur.USER_ID='141' 
where mm.ID='1'  
UNION (SELECT 
       'List' as TITLE, 
        1 as ID, 
        case (WHEN ur.MENU_RELATION_ID=1 THEN NULL ELSE USER_ID END)as USER_ID 
     from 
 LEO_MENU_ACTIVITY_RELATION mr 
inner join LEO_MENU_MASTER mm on mm.ID=mr.MENU_ID 
INNER join LEO_MENUACTIVITY ma on mr.ACTIVITY_ID=ma.ID
LEFT OUTER JOIN LEO_USER_RIGHTS ur on ma.ID=ur.MENU_RELATION_ID and ur.MENU_ID=mm.ID and ur.USER_ID='141' 
where mm.ID='1'  
) 

If this is used often I would create a view to avoid duplicate code. In ORACLE (I do not know for other SQL dialects) there is a WITH statement enables you to make a sort of "temporary view".

如果经常使用,我会创建一个视图以避免重复代码。在 ORACLE(我不知道其他 SQL 方言)中有一个 WITH 语句使您能够创建一种“临时视图”。