Where子句中的NVL不返回具有空值的记录

时间:2011-05-18 14:23:45

标签: sql oracle10g

我使用了这个SELECT声明:

SELECT 
 ID 
 ,SUB_TYPE    
 ,SERVICE_ID  
 ,MENU_TYPE   
 ,MENU_DESCRIPTION  
    FROM MY_TABLE 
    WHERE   SUB_TYPE     = NVL('' , SUB_TYPE)     
        AND SERVICE_ID   = NVL('' , SERVICE_ID)   
        AND MENU_TYPE    = NVL('' , MENU_TYPE)       

具有空MENU_TYPE的行不会返回,但我希望这些记录返回

提前致谢

2 个答案:

答案 0 :(得分:1)

NULL永远不会等于NULL。在Oracle中,''为NULL。

试试这个:

((:P_MENU_TYPE IS NULL AND MENU_TYPE IS NULL) OR MENU_TYPE = :P_MENU_TYPE)

(我把一个绑定变量:P_MENU_TYPE放在那里'',因为SQL对''来说没有用!)

如果您的意思是,如果参数不为null,则MENU_TYPE必须与参数匹配,并且当参数为null时,可以是包括null的任何内容,然后只需:

(:P_MENU_TYPE IS NULL OR MENU_TYPE = :P_MENU_TYPE)

答案 1 :(得分:0)

您在寻找所有三列都为空的行吗?如果是这样,你想要:

WHERE SUB_TYPE    is null
 AND  SERVICE_ID  is null
 AND  MENU_TYPE   in null