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