【发布时间】:2020-11-19 02:42:40
【问题描述】:
我有一个表,其中有一个主键,外键。 我只想找到每个外键的一个主列表。 例子
我需要一个只返回主键(1 或 2 或 3)和(4 或 5)或(6 或 7 或 8)的查询 基本上是 1,4 和 6。我怎样才能为每个外键获得一个 PK
【问题讨论】:
我有一个表,其中有一个主键,外键。 我只想找到每个外键的一个主列表。 例子
我需要一个只返回主键(1 或 2 或 3)和(4 或 5)或(6 或 7 或 8)的查询 基本上是 1,4 和 6。我怎样才能为每个外键获得一个 PK
【问题讨论】:
使用聚合:
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);
【讨论】:
where 子句中使用not exists。如果不清楚,请提出一个新的问题并给出适当的解释。