SQL仅针对第1个TRUE条件返回

米库库

我有一个简单的查询,如果很多条件中的第一个为真,我只想返回一个值。

查询如下所示:

SELECT * FROM table
WHERE case column 
           when val1 then 1
           when val2 then 1
           when val3 then 1
      end = 1

在表中,可以是所有值(val1,val2和val3)的行,但不是强制性的,我只想返回条件为true的第一行,并放弃其余条件。

对于我的SQL版本,select语句返回所有TRUE条件的行。

你能帮我吗。

托斯滕·凯特纳

据我了解,您的要求:您可以在不同条件下找到匹配项。您只想返回最匹配的行。

一个典型的例子是设置表,其中可以包含国家,城市甚至地区的设置。您需要区域设置(如果可用),或者城市设置,并且只有在城市设置不可用的情况下,您才能满足于全球国家/地区设置。

对于这样的排名,您可以使用ROW_NUMBER也就是说,您对行进行编号,给出最佳匹配#1,第二最佳匹配#2,依此类推。然后,您仅使行保持排名#1。

select *
from
(
  select
    s.*,
    row_number() 
      over (order by case
             when s.country = :country
              and s.city = :city
              and s.district = :district then 1
             when s.country = :country
              and s.city = :city then 2
             else 3
            end) as rn
  from settings s
  where s.country = :country
)
where rn = 1;

在您的示例中:

select *
from
(
  select 
    t.*,
    row_number()
      over (order by case column when val1 then 1 when val2 then 2 else 3 end) as rn
  from table t
  where column in (val1, val2, val3)
)
where rn = 1;

如果可以联系,即如果至少有一行匹配val1,则显示所有匹配val1的行,依此类推,然后使用RANKDENSE_RANK代替ROW_NUMBER

从Oracle 12c开始,您还可以使用以下FETCH子句:

  select *
  from table
  where column in (val1, val2, val3)
  order by row_number()
             over (order by case column when val1 then 1 when val2 then 2 else 3 end)
  fetch first row only;

同样,如果您想允许平局,请使用RANKDENSE_RANK并替换FETCH FIRST ROW ONLYFETCH FIRST ROW WITH TIES

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

sql查询仅返回1个值

来自分类Dev

SQL查询仅返回满足2个条件的1条记录

来自分类Dev

SQL查询仅返回满足2个条件的1条记录

来自分类Dev

SQL连接2个表,从第2个开始查询第1个条件

来自分类Dev

db 查询仅返回条件 1=true 或条件 2=true 的记录,但不返回条件 1 和条件 2=true 的集合

来自分类Dev

仅 1 列的 SQL 条件

来自分类Dev

SQL函数仅返回“ 1”

来自分类Dev

SQL 查询返回 2 个结果,但在 c# 网页中仅显示 1 个结果

来自分类Dev

isset()仅返回true

来自分类Dev

如何比较列并在SQL中仅返回其中的1个

来自分类Dev

SQL SUM仅返回> = 1的值

来自分类Dev

如何在情况为True时仅返回1?

来自分类Dev

为什么python返回第n + 1个列表元素而不是第n个?

来自分类Dev

nginx + Apache仅针对一个域返回404错误

来自分类Dev

Solr 仅针对一个特定请求返回“No live SolrServers available”

来自分类Dev

Rails控制台SQL查询仅返回true

来自分类Dev

Rails控制台SQL查询仅返回true

来自分类Dev

JPQL,还是仅返回一个条件的结果?

来自分类Dev

仅针对特定条件的日期

来自分类Dev

VBA中的IF公式仅返回True或False,而不返回条件值

来自分类Dev

Oracle SQL 中的条件连接仅返回非空值

来自分类Dev

仅选择1个不同的列-SQL

来自分类Dev

.htaccess重写带有问号“?”的URL 仅针对1个特定的URL

来自分类Dev

仅显示1个数据时针对ListView问题进行自定义ArrayAdapter筛选

来自分类Dev

SQL:仅组仅显示 1 个成员级别

来自分类Dev

仅返回true或false(PHP)

来自分类Dev

Rails / ActiveRecord / SQL基于最高优先级每个user_id仅返回1个条目

来自分类Dev

SQL查询仅具有一个条件的记录

来自分类Dev

使用XDocument迭代XML文档仅返回1个后代

Related 相关文章

热门标签

归档