2010-12-09 44 views
0
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值'表必须被检索。甲骨文:如果那么如何使用select语句

我该怎么做?请帮助

Krishnik

+0

除了在WHEN和END之后出现的一组神秘的括号之外,CASE表达式看起来是正确的。你遇到什么问题? – 2010-12-09 07:45:31

回答

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语句使您能够进行某种“临时视图”。