选择“查询”以检查两者或两者或条件

时间:2014-06-26 05:24:48

标签: sql postgresql wso2esb

我使用postgresql 9.1并希望从表中选择一条记录。详情如下:

表名:muser

表中的字段:userid,username,firstname,lastname,phonenumber和mailid

要选择的字段:userid,mailid,phonenumber

请求参数:mailid和phonenumber

应满足条件:

  1. 当两者都存在时显示记录

  2. 仅在存在mailid时显示记录

  3. 仅显示phonenumber时显示记录。

  4. 预期产出:

    单条记录(因为用户标识是唯一的) 用户ID,      phonenumber和      mailid

    两者或任何一个如果存在。

    我已经尝试过查询:

    SELECT userid, mailid, phonenumber 
    FROM muser 
    WHERE phonenumber = ? OR mailid = ?
    

    它在前两个条件下正常工作但不适用于最后一个条件。当我查询最后一个条件时,它会给出查询中的所有记录。为什么?他们的查询有什么变化吗?或其他任何东西

2 个答案:

答案 0 :(得分:0)

假设当你的意思是"不存在"时,mailid或phonenumber将在数据库中NULL

SELECT userid, mailid, phonenumber 
FROM muser 
WHERE (phonenumber = ? AND (mailid IS NULL OR mailid = ''))
OR ((phonenumber IS NULL OR phonenumber = '') AND mailid = ?)
OR (phonenumber = ? AND mailid = ?)

答案 1 :(得分:0)

当我处理过滤器时,其价值可以是null,我会尝试添加coalesce()

SELECT userid, mailid, phonenumber 
FROM muser 
WHERE coalesce(phonenumber,'no data') = coalesce(?,'no data') 
OR coalesce(mailid,'no data') = coalesce(?, 'no data');