什么是最简单的SQL语句,它将返回给定列的重复值及其在Oracle数据库表中的出现次数?
例如:我有一个JOBS包含列的表JOB_NUMBER.我怎样才能知道我是否有任何副本JOB_NUMBER,以及它们被复制了多少次?
我经常发现这三种变体:
SELECT COUNT(*) FROM Foo;
SELECT COUNT(1) FROM Foo;
SELECT COUNT(PrimaryKey) FROM Foo;
Run Code Online (Sandbox Code Playgroud)
据我所知,他们都做同样的事情,我发现自己在我的代码库中使用了三个.但是,我不喜欢以不同的方式做同样的事情.我应该坚持哪一个?他们中的任何一个比其他两个更好吗?
我有一张这样的桌子
ID nachname vorname
1 john doe
2 john doe
3 jim doe
4 Michael Knight
Run Code Online (Sandbox Code Playgroud)
我需要一个查询,它将返回具有相同nachname和vorname的记录中的所有字段(select*)(在本例中为记录1和2).谁能帮我这个?谢谢
我必须清理一个有重复行的表:
id: serial id
gid: group id
url: string <- this is the column that I have to cleanup
Run Code Online (Sandbox Code Playgroud)
一个gid可能有多个url值:
id gid url
---- ---- ------------
1 12 www.gmail.com
2 12 www.some.com
3 12 www.some.com <-- duplicate
4 13 www.other.com
5 13 www.milfsome.com <-- not a duplicate
Run Code Online (Sandbox Code Playgroud)
我想对整个表执行一个查询,并删除所有gid和url重复的行.在上面的示例中,删除后,我想只剩下1,2,4和5.
我创建了一个查询来删除表中的重复行.我试图这样做,但输出是"太多的价值"
DELETE FROM Employeetest
WHERE employeeid IN (SELECT
employeetest.*,
ROW_NUMBER() OVER (PARTITION BY employeeid ORDER BY employeeid) AS rownumber
FROM
employeetest
HAVING
(rownumber > 1));
Run Code Online (Sandbox Code Playgroud)
我也做了
SELECT
employeetest.*,
ROW_NUMBER() OVER (PARTITION BY employeeid ORDER BY employeeid) AS rownumber
FROM
employeetest
Run Code Online (Sandbox Code Playgroud)
然后
DELETE * FROM employeetest;
Run Code Online (Sandbox Code Playgroud)
它不起作用