Oracle SQL:如何从组中查找记录
Posted
技术标签:
【中文标题】Oracle SQL:如何从组中查找记录【英文标题】:Oracle SQL : how to find just record from a group 【发布时间】:2020-11-19 02:42:40 【问题描述】:我有一个表,其中有一个主键,外键。 我只想找到每个外键的一个主列表。 例子
我需要一个只返回主键(1 或 2 或 3)和(4 或 5)或(6 或 7 或 8)的查询 基本上是 1,4 和 6。我怎样才能为每个外键获得一个 PK
【问题讨论】:
【参考方案1】:使用聚合:
select foreignKey, min(primaryKey)
from t
group by foreignKey;
如果你想要一个随机值,你可以使用keep
语法:
select foreignKey,
min(primaryKey) keep (dense_rank first order by dbms_random.random)
from t
group by foreignKey;
如果您有很多列,您可以使用row_number()
或相关子查询:
select t.*
from t
where t.primarykey = (select min(t2.primarykey) from t t2 where t2.foreignkey = t.foreignkey);
【讨论】:
我有一个后续问题。我有另一个表,其中包含所有上述主键的列表。让我们说表 B。我如何检查 - 来自上述查询的 min(primary key ) 中的哪一个 - 在表 B 中不存在? @Marco 。 . .只需在where
子句中使用not exists
。如果不清楚,请提出一个新的问题并给出适当的解释。
似乎我不能在 90 分钟内发布另一个问题。我确实理解 NOT EXISTS 和 WHERE,但 Group by 让我失望了。以上是关于Oracle SQL:如何从组中查找记录的主要内容,如果未能解决你的问题,请参考以下文章