Sql查询没有给出正确的输出

时间:2011-08-10 05:12:31

标签: sql oracle10g

SELECT MAX(date)
                    FROM abc
                   WHERE 
                      p_id=p_p_id
                     AND nvl(c_number,0)=nvl(p_c_number,0) 
                     AND nvl(m_number,0)=nvl(p_m_number,0)
                     AND nvl(s_number,0)=nvl(p_s_number,0);
  
    

在上面的查询中,p_p_id,p_c_number,p_m_number& p_s_number传递给此查询,但此查询在某些条件下给出错误的输出:     在表abc c_number中,m_number,s_number可以是null,零或任何其他值     我想匹配c_number如果null与p_c_number如果为null     但是上面查询的问题是,如果c_number为null,则将零分配给c_number,如果p_c_number已经为零,则它将null与零值匹配     请帮助..我正在使用oracle作为rdbms

  

1 个答案:

答案 0 :(得分:2)

尝试使用以下

替换每个nvl条件
AND (c_number = p_c_number OR (c_number IS NULL AND p_c_number IS NULL))

pst表示

AND (c_number = p_c_number OR COALESCE(c_number, p_c_number) IS NULL)