选择Query以检查其中一个或条件

时间:2014-06-25 12:17:19

标签: sql postgresql wso2esb

我正在使用postgresql 9.1并希望从表中选择一些记录。 详情如下: 表名:muser 要选择的字段:userid,mailid,phonenumber

我使用了以下查询:

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

它应该满足以下条件:

  1. 当两者都存在时显示记录
  2. 仅存在mailid时显示记录
  3. 仅显示phonenumber时显示记录。
  4. 重要的是 userid是唯一的。所以结果应该是一个记录。我在我的wso2esb工具中使用过滤器。在过滤器中使用上述条件时,在前两个条件中查询工作正常但在最后一个条件下它显示了table.is中可用的所有用户ID是不正确的?或者我必须在查询

    中使用另一个子句而不是or子句

2 个答案:

答案 0 :(得分:1)

null作为缺席参数的值

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

答案 1 :(得分: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)