Mar*_*arc 8 oracle select duplicates
我有一个有6列的表:
id name type_id code lat long前三个是必需的. ID是私钥,自动插入序列.
我有一些重复的行,由BOTH定义name并且type_id相等,但我想查看欺骗的所有数据.我可以简单地找到傻瓜:
SELECT name
, type_id
FROM table1
GROUP BY name
, type_id
HAVING COUNT(*) > 1
Run Code Online (Sandbox Code Playgroud)
但实际上查看所有信息让我感到困惑.我知道这应该很简单,但我在这里打了一堵墙.
Jus*_*ave 15
您始终可以在IN子句中使用GROUP BY/ HAVINGquery.这是有效的并且相对简单,但如果重复行的数量相对较大,则可能不是特别有效.
SELECT *
FROM table1
WHERE (name, type_id) IN (SELECT name, type_id
FROM table1
GROUP BY name, type_id
HAVING COUNT(*) > 1)
Run Code Online (Sandbox Code Playgroud)
使用分析函数通常会更有效,以避免第二次碰到表.
SELECT *
FROM (SELECT id,
name,
type_id,
code,
lat,
long,
count(*) over (partition by name, type_id) cnt
FROM table1)
WHERE cnt > 1
Run Code Online (Sandbox Code Playgroud)
根据您计划对数据执行的操作以及可能存在的特定行的重复次数,您还可能希望加入table1自身以将数据放入单行中
SELECT a.name,
a.type_id,
a.id,
b.id,
a.code,
b.code,
a.lat,
b.lat,
a.long,
b.long
FROM table1 a
JOIN table1 b ON (a.name = b.name AND
a.type_id = b.type_id AND
a.rowid > b.rowid)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
35891 次 |
| 最近记录: |