选择查询检查双方或一方或条件

问题描述 投票:0回答:2

我使用PostgreSQL 9.1并希望选择表中的单个记录。详情如下:

表名:MUSER

目前在表中的字段:用户ID,用户名,名字,姓氏,电话号码和电子邮件ID

要选择字段:用户ID,电子邮件ID,电话号码

请求参数:电子邮件ID和电话号码

条件应满足:

  1. 显示当两者都存在一个记录
  2. 显示记录时仅mailid是本
  3. 当仅PHONENUMBER存在显示的记录。

预期输出:

单个记录(用户ID是唯一的)使用用户ID,电话号码和电子邮件ID

两者或任一个(如果存在)。

我曾试图查询为:

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

它的工作罚款前两个条件,但去年condition..When不工作我火了最后一个条件查询它给目前在query.Why因此所有记录?是他们在查询什么变化?或其他任何

sql postgresql wso2esb
2个回答
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 = ?)

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');
© www.soinside.com 2019 - 2024. All rights reserved.