如何从表中获取不同的记录?
有人向我建议这个问题:
select * from emp a
where rowid = (select max(rowid) from emp b
where a.empno=b.empno);
插入的每一行rowid
是唯一的吗?使用max(rowid)
有什么用?
为什么我不能使用以下查询?
select distinct sal, distinct empno from emp;
答案 0 :(得分:2)
ROWID是独一无二的。
当条件找到多行(duplciate)时使用MAX(ROWID),然后在此处记录最新的(排序后的最后一条记录)。
First Query是根据不同的值从表中选择所有行 一栏。
第二个查询是选择一个具有自己的列 清晰度。
这两个查询都会让您与众不同。但等待select distinct sal, distinct empno from emp;
错误,应为select distinct sal, empno from emp;
考虑以下
--
-- DATASET (Table)
--
CREATE TABLE DATASET ( VAL1 CHAR ( 1 CHAR ),
VAL2 VARCHAR2 ( 10 CHAR ),
VAL3 NUMBER );
INSERT INTO
DATASET ( VAL1, VAL2, VAL3 )
VALUES
( 'b', 'b-details', 2 );
INSERT INTO
DATASET ( VAL1, VAL2, VAL3 )
VALUES
( 'a', 'a-details', 1 );
INSERT INTO
DATASET ( VAL1, VAL2, VAL3 )
VALUES
( 'c', 'c-details', 3 );
INSERT INTO
DATASET ( VAL1, VAL2, VAL3 )
VALUES
( 'a', 'dup', 4 );
COMMIT;
现在是您的第一个查询
SELECT
*
FROM
DATASET A
WHERE
ROWID = (SELECT
MAX ( ROWID )
FROM
DATASET B
WHERE
A.VAL1 = B.VAL1);
VAL1 VAL2 VAL3
---- ---------- ----------
b b-details 2
a as 4
c c-details 3
3 rows selected.
PS:我选择了一列(VAL1)上具有不同条件的所有列(VAL1,VAL2,VAL3),因此重复项按其他列排序,因此您会看到一行。< / p>
现在第二次查询
SELECT DISTINCT VAl1 FROM DATASET;
VAL1
----
b
a
c
3 rows selected.
PS:这里我选择一个不同的列(VAL1)
答案 1 :(得分:1)
rowid对每一行都是唯一的,建议的请求将为每个empno插入最后一条记录
不要重复DISTINCT,以下SQL请求将返回所有不同的sal,empno
select distinct sal, empno from emp;
答案 2 :(得分:0)
您可以使用group by获取不同的记录。
从emp中选择sal,empno Sal,empno的小组;
答案 3 :(得分:0)
delete from emp a where rowid != (select max(rowid) from emp b where a.empno=b.empno);