oracle 如何获取符合条件的每个结果集的第一个结果

mi7gmzs6  于 2022-11-03  发布在  Oracle
关注(0)|答案(1)|浏览(284)

假设我有以下Person表:

ID, Name, Age, Height, Weight

我执行以下查询:

SELECT * FROM Person WHERE name = 'Fred' AND age = '19' AND ROWNUM <= 1

这将返回与这些条件匹配的第一行。
现在,我执行以下查询:

SELECT * FROM Person WHERE name || '|' age IN ('Fred|19','Joe|25','Sam|21')

这将返回与条件匹配的所有行。
我的问题是,是否有一种方法可以将第一个查询的“rownum”功能与第二个查询的多条件结合起来。|19(如有),Joe的第1个结果|25(如有)和Sam的第1个结果|21(如有)
简单地将它们结合起来是行不通的:

SELECT * FROM Person WHERE name || '|' age IN ('Fred|19','Joe|25','Sam|21') AND ROWNUM <= 3

如果Fred有3行以上|19,我将取回这3行。如果有帮助,我将使用Oracle数据库

bcs8qyzn

bcs8qyzn1#

在这种情况下,最好避免连接。
DBFiddle:https://dbfiddle.uk/7xZ5vyc _数据库小键盘

SELECT
  p.*
FROM Person p
WHERE 
  (name,age) IN (
     ('Fred',19),
     ('Joe',25),
     ('Sam',21)
   )
order by row_number()over(partition by name,age order by null) 
fetch first 1 row with ties

相关问题