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:如何从组中查找记录的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server 查询需要从组中提取数据

无法通过查询从组中获取结果

仅从组中选择第一行的 SQL 模式

如何在 Oracle 中查找 SQL 查询中返回的记录的内存大小?

SQL Server:根据多个条件从组中选择特定行

关于多个分组的问题。如何从组中获取单行?