如何解决如何在Oracle SQL中查找最特定的匹配行
我需要能够运行一个查询,该查询使我只能找到最具体的匹配项。我的意思是我有一个包含主题,类别和类型列的表,并且我想编写一个查询,该查询将仅选择与所有这三列都匹配的行。如果没有匹配所有3列的行,它将选择与主题和类别匹配的行。如果没有类别,它将选择与主题匹配的行。
我认为我使用函数LEAST看到了一些类似的东西:
SELECT LEAST(
(SELECT * FROM TABLE_1 WHERE AMT < 10),(SELECT * FROM TABLE_1 WHERE AMT > 10)
)
所以我只是想知道是否可以通过类似的方法找到最具体的匹配项,或者是否需要其他方法。
在此先感谢您的帮助。
解决方法
如果只需要一行,则可以在限制较少的条件下过滤表,然后使用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
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。