基于搜索中输入的值的自定义查询

时间:2017-04-28 15:19:00

标签: sql oracle

我希望有人能够至少指出我正在努力拼凑的事情。

从概念上讲,它看起来很简单:在搜索表单中,用户从一个字段的下拉列表中选择值,在另外两个字段中手动输入值,然后单击按钮开始搜索数据库。如果选择/输入的所有3个值都与db中的记录匹配,则显示记录,但如果1个或多个值不匹配(但其中至少有1个 匹配),则只显示消息,如"一个或多个值不匹配,请再试一次"。如果所有值都不匹配,则显示不同的消息,例如"记录未创建"。

我无法理解如何在SQL查询中完成此操作。任何建议将不胜感激。谢谢。

1 个答案:

答案 0 :(得分:1)

我想你可以做这样的事情。这使用了三个过滤器,这些过滤器也在select子句中用于确定是否使用过滤器。然后你可以检查这个没有行,有3个过滤器命中的行,或者返回的行数少于3个过滤器。

    with test_data(id, name, value) as (
        select 1, 'bob', 100 from dual union all
        select 2, 'sue', 90 from dual union all
        select 3, 'bill', 110 from dual union all
        select 4, 'tom', 125 from dual union all
        select 5, 'bart', 95 from dual)
    select test_data.*,
           case when id >= 3 then 1 else 0 end 
            + case when name like 'b%' then 1 else 0 end 
            + case when value >= 100 then 1 else 0 end as filter_count
    from   test_data
    where  id >= 3
        or name like 'b%'
        or value >= 100;