我正在使用postgresql 9.1并希望从表中选择一些记录。 详情如下: 表名:muser 要选择的字段:userid,mailid,phonenumber
我使用了以下查询:
SELECT userid, mailid, phonenumber FROM muser WHERE phonenumber = ? OR mailid = ?
它应该满足以下条件:
重要的是 userid是唯一的。所以结果应该是一个记录。我在我的wso2esb工具中使用过滤器。在过滤器中使用上述条件时,在前两个条件中查询工作正常但在最后一个条件下它显示了table.is中可用的所有用户ID是不正确的?或者我必须在查询
中使用另一个子句而不是or子句答案 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)