2014-06-25 32 views
0

我正在使用postgresql 9.1并希望从表中选择一些记录。 详情如下: 表名:将被选择MUSER 字段:用户ID,mailid,PHONENUMBER选择查询检查任一条件或条件

我已经查询等中使用:

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

,它应该满足以下条件:

  1. 当两者都存在时显示记录
  2. 只显示只有mailid存在的记录
  3. 仅当存在电话号码时才显示记录。

重要的是用户ID是唯一的。所以结果应该是单个记录。我已经在我的wso2esb工具中使用过滤器,并且在过滤器中使用上述条件进行过滤时,在前两种情况下查询工作正常,但在最后一种情况下,它显示table.is中可用的所有userid,但查询不正确?或者我有用户的另一条款代替或子句中查询

+2

能否请您提供的样本数据和预期的输出? – Uriil

+0

“现在”是指你是否在记录中存在或作为输入参数存在?换句话说:表中的'phonenumber'和'mailid'字段是否为NULL?他们可以作为参数是空的吗?正如Uriil所说:请向我们展示样品数据和预期产出! –

+0

没有..他们不是空的..我在查询中采取phno和mailid示例,并试图检查其中一个或两个是否可用在表中或不是? – user3129056

回答

1

null作为缺席参数的值

select userid, mailid, phonenumber 
from muser 
where 
    (phonenumber = ? or ? is null) 
    and 
    (mailid = ? or ? is null) 
+0

:thanks for reply.Please检查下面的链接..我有更多的细节更新我的问题http://stackoverflow.com/questions/24422963/select-query-to-check-both-or-either-or-condition – user3129056

0

的事实userid是独一无二的,并不意味着邮件ID和手机数字是唯一的。如果两个用户具有相同的phonenumber(这可能发生在公司中),则在搜索此电话号码时,您将获得两个用户。记住这一点。

我假设要么给出这两个参数,要么只是其中一个丢失。在最后一种情况下,通过缺失参数NULL

允许使用的参数$1的邮件ID和$2的电话号码

SELECT 
    userid, mailid, phonenumber 
FROM 
    muser 
WHERE 
    ($1 IS NULL OR $1 IS NOT NULL AND mailid = $1) AND 
    ($2 IS NULL OR $2 IS NOT NULL AND phonenumber = $2)