如何在 Oracle SQL 中查找最具体的匹配行

How to Find the Most Specific Matching Row in Oracle SQL

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

我想我已经看到一些使用 LEAST 函数的东西看起来与此类似:

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

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

在此先感谢您的帮助。

如果只需要一行,可以在限制较少的条件下过滤table,然后用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代替。