我使用postgresql 9.1并希望从表中选择一条记录。详情如下:
表名:muser
表中的字段:userid,username,firstname,lastname,phonenumber和mailid
要选择的字段:userid,mailid,phonenumber
请求参数:mailid和phonenumber
应满足条件:
当两者都存在时显示记录
仅在存在mailid时显示记录
仅显示phonenumber时显示记录。
预期产出:
单条记录(因为用户标识是唯一的) 用户ID, phonenumber和 mailid
两者或任何一个如果存在。
我已经尝试过查询:
SELECT userid, mailid, phonenumber
FROM muser
WHERE phonenumber = ? OR mailid = ?
它在前两个条件下正常工作但不适用于最后一个条件。当我查询最后一个条件时,它会给出查询中的所有记录。为什么?他们的查询有什么变化吗?或其他任何东西
答案 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');