2010-12-09 5 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) 

Dans l'Union je veux effectuer une sélection, comme condition si ur.MENU_RELATION_ID = 1 alors la USER_ID doit être sélectionné comme NULL sinon la valeur originale des « LEO_USER_RIGHTS La table doit être récupérée.Oracle: Comment utiliser si alors dans une instruction select

Comment puis-je faire cela? S'il vous plaît aider

Krishnik

+0

À l'exception d'un ensemble mystérieux de parenthèses apparaissant avant WHEN et après END, cette expression CASE semble correcte. Quel problème éprouvez-vous? –

+0

pour clarifier, supprimer ces parenthèses: cas QUAND ur.MENU_RELATION_ID = 1 ALORS NULL ELSE USER_ID END – gdj

+0

Vous le faites correctement. Où est le problème? Êtes-vous en train de dire que vous voulez avoir une condition basée sur le syndicat? – hol

Répondre

1

Si vous souhaitez combiner dans un quelque chose UNION basé sur la première table, je pense que vous ne pouvez le faire en répétant la chose comme ceci:

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' 
) 

Si cela est utilisé souvent je créerais une vue pour éviter le code en double. Dans ORACLE (je ne sais pas pour les autres dialectes SQL), une instruction WITH vous permet de faire une sorte de "vue temporaire".

Questions connexes