1

我的数据库中有 20 列。我只需要选择具有不同 Ref_ID 的那些,但如果我使用 distinct(ref_ID),我只会得到这些值的列表。我需要检索所有列,例如所有记录但具有不同的 ref_id。
我正在使用 Oracle 9g。
例如,有 10 条记录,其中 5 条具有相同的 ref_id。所以选择应该只返回所有列的这 5 条记录。

4

3 回答 3

3

试试这个:http ://www.sqlfiddle.com/#!4/9f1ae/10

select *
from
(
  select rank() over(partition by d_let order by d_num) rank, tbl.*
  from tbl
  order by d_let
) x
where x.rank = 1 -- only the first row among duplicates

数据:

CREATE TABLE tbl
    (d_let varchar2(1), d_num int)
/
INSERT ALL
    INTO tbl (d_let, d_num)
         VALUES ('a', 1)
    INTO tbl (d_let, d_num)
         VALUES ('a', 2)
    INTO tbl (d_let, d_num)
         VALUES ('a', 3)
    INTO tbl (d_let, d_num)
         VALUES ('b', 6)
    INTO tbl (d_let, d_num)
         VALUES ('b', 3)
    INTO tbl (d_let, d_num)
         VALUES ('c', 2)
    INTO tbl (d_let, d_num)
         VALUES ('c', 3)
    INTO tbl (d_let, d_num)
         VALUES ('c', 5)
    INTO tbl (d_let, d_num)
         VALUES ('c', 6)
    INTO tbl (d_let, d_num)
         VALUES ('c', 4)
SELECT * FROM dual

输出:

RANK        D_LET   D_NUM
1           a       1
1           b       3
1           c       2
于 2012-05-03T07:16:25.267 回答
2

很难说出您的意思,但这是一个想法,这将返回您的表多次包含的 REF_ID 值:

select * from YOUR_TABLE
where REF_ID in(
    select REF_ID from YOUR_TABLE
    group by 
      REF_ID
    having
      count(REF_ID) > 1)
于 2012-05-03T07:03:39.263 回答
0

另一种解决方案:

SELECT * 
FROM TableX t
WHERE EXISTS
      ( SELECT *
        FROM TableX tt
        WHERE tt.REF_ID = t.REF_ID
          AND tt.PK <> t.PK           --- the Primary Key of the table
      ) 
于 2012-05-03T07:38:11.443 回答