【问题标题】:Select Query to check both or either or condition选择查询以检查两者或其中一个或条件
【发布时间】:2014-08-16 20:38:39
【问题描述】:

我正在使用 postgresql 9.1 并希望从表中选择一条记录。详情如下:

表名:muser

表中存在的字段:用户 ID、用户名、名字、姓氏、电话号码和邮件 ID

要选择的字段:用户 ID、邮件 ID、电话号码

请求参数:mailid 和电话号码

需要满足的条件:

  1. 当两者都存在时显示一条记录

  2. 只有mailid存在时显示记录

  3. 仅在电话号码存在时显示记录。

预期输出:

单条记录(因为 userid 是唯一的) 使用用户名, 电话号码和 邮件编号

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

我已尝试查询为:

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

它在前两个条件下工作正常,但对最后一个条件不起作用。当我为最后一个条件触发查询时,它会给出查询中存在的所有记录。为什么会这样?他们的查询有什么变化吗?或者别的什么

【问题讨论】:

  • 你说的最后一个条件是什么意思?我在您提供的查询中只看到 2 个 where 子句元素。
  • 我的意思是当我只输入 mailid 并且 phonenumber 不存在时,我得到了表中存在的所有记录
  • 我只需要一个查询来检查他们在表中的记录是包含请求提供的电话号码或请求提供的 mailid 还是表中同时存在 phno 和 mailid 的记录??跨度>

标签: sql postgresql wso2esb


【解决方案1】:

当我处理值可以是任何值的过滤器时,包括null,我会尝试添加coalesce()

SELECT userid, mailid, phonenumber 
FROM muser 
WHERE coalesce(phonenumber,'no data') = coalesce(?,'no data') 
OR coalesce(mailid,'no data') = coalesce(?, 'no data');

【讨论】:

    【解决方案2】:

    假设当您的意思是“不存在”时,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 = ?)
    

    【讨论】:

    • 您能提供更多信息吗?例如,当邮寄不存在时,它实际上是 NULL 还是空白?
    • 当mailid不存在时,可能为空
    • 还添加了空字符串检查,立即尝试
    • 我现在无法访问数据库,也找不到任何语法错误。从概念上讲,解决方案应该像上面那样。但是您需要尝试解决任何语法错误等。
    猜你喜欢
    • 1970-01-01
    • 2020-05-21
    • 2018-04-28
    • 1970-01-01
    • 2013-08-06
    • 1970-01-01
    • 2012-01-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多