oracle - 如何为 ID 不同的列选择唯一值?

标签 oracle select distinct

我有一个返回 ID 列和值列的 select 语句。 ID 列中的值不同,但值列中存在重复项。

这是一个例子:

    ID    |    Value
-----------------------
    1     |     Bob
    2     |     Jane
    3     |     Bob
    4     |     Mike
    5     |     Suzy
    6     |     Mike

正如您所看到的,有 4 个唯一名称值,但返回了 6 条记录,因为 ID 都不同。通常不应该这样做,但这只是示例数据(并非真正使用名称),对于我需要做的事情,我需要删除具有重复名称的记录。

我尝试使用领先或滞后函数,但无法删除重复项。

关于如何修改直接选择语句以获取两列但仅具有唯一名称的任何想法?

最佳答案

这会删除具有重复名称的记录,但保留 ID 最低的第一条记录。

DELETE FROM table t
WHERE EXISTS (
   SELECT null FROM table t1
   WHERE t.name = t1.name AND t.id < t1.id
)

如果您只想选择记录,那么

SELECT * FROM table t
WHERE NOT EXISTS(
   SELECT null FROM table t1
   WHERE t.name = t1.name AND t.id < t1.id
)

关于oracle - 如何为 ID 不同的列选择唯一值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35349344/

相关文章:

php - Oracle 过程输出参数从 PHP 返回 -1

sql - Oracle 11g OFFSET FETCH 给出错误

MySQL在一个查询中获取多个列关联值

javascript - 在您选择其中任何一个之前,将显示带有空白的 HTML 选择框

mysql - 数据库设计(自定义属性取决于另一个属性)- MySQL 或其他

mysql - 为什么Mysql的Group By和Oracle的Group by行为不同

sql - 在 SELECT 结果上使用 IN 运算符的 IF 语句

php - 从 MySQL 数据库表中获取 X 列唯一的所有列

Mysql 仅将一行求和一次 - 使用 Group By

mysql - 带有 DISTINCT 的 PHP7/mySQL 查询加上显示 $row 中的其他列