Oracle:如何在select语句中使用

时间:2010-12-09 07:30:02

标签: oracle conditional

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)

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

我该怎么做?请帮忙

Krishnik

1 个答案:

答案 0 :(得分:1)

如果你想在一个基于第一个表的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'  
) 

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