【问题标题】:Oracle SQL : how to find just record from a groupOracle SQL:如何从组中查找记录
【发布时间】:2020-11-19 02:42:40
【问题描述】:

我有一个表,其中有一个主键,外键。 我只想找到每个外键的一个主列表。 例子

我需要一个只返回主键(1 或 2 或 3)和(4 或 5)或(6 或 7 或 8)的查询 基本上是 1,4 和 6。我怎样才能为每个外键获得一个 PK

【问题讨论】:

    标签: sql oracle


    【解决方案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 让我失望了。
    猜你喜欢
    • 1970-01-01
    • 2021-07-22
    • 2017-04-01
    • 1970-01-01
    • 2021-12-29
    • 2015-02-14
    • 2015-07-01
    • 2012-04-22
    • 1970-01-01
    相关资源
    最近更新 更多