【问题标题】:How to Find the Most Specific Matching Row in Oracle SQL如何在 Oracle SQL 中查找最具体的匹配行
【发布时间】:2020-09-01 23:57:54
【问题描述】:

我需要能够运行一个查询,只允许我找到最具体的匹配项。我的意思是我有一个包含主题、类别和类型列的表,并且我想编写一个查询,该查询将只选择与所有这 3 个列匹配的行。如果没有匹配所有 3 列的行,它将选择匹配主题和类别的行。如果没有类别,它将选择与主题匹配的行。

我认为我使用 LEAST 函数看到了一些类似于此的东西:

SELECT LEAST(
    (SELECT * FROM TABLE_1 WHERE AMT < 10),
    (SELECT * FROM TABLE_1 WHERE AMT > 10)
)

所以我只是想知道是否可以做类似的事情来找到最具体的匹配,或者是否需要其他方法。

提前感谢您的帮助。

【问题讨论】:

    标签: sql oracle subquery sql-order-by where-clause


    【解决方案1】:

    如果您只想要一行,您可以根据限制较少的条件过滤表格,然后使用 case 表达式对结果进行排序,最后只保留第一行。

    select t.*
    from mytable t
    where subject = :subject
    order by case
        when category = :category and type = :type then 0
        when category = :category then 1
        else 2
    end fetch first 1 row only
    

    如果满足其中一个条件的行可能不止一行,您可以改用fetch first 1 row with ties

    【讨论】:

      猜你喜欢
      • 2015-10-09
      • 1970-01-01
      • 2021-12-21
      • 1970-01-01
      • 2017-09-29
      • 1970-01-01
      • 1970-01-01
      • 2020-08-11
      • 2020-12-05
      相关资源
      最近更新 更多