在数据库中查找重复的行

jav*_*guy 4 sql database oracle

如何找到重复的行?如果last_name是重复字段,我想要显示

last_name frst_name frst_name1 frst_name2 ....  
Run Code Online (Sandbox Code Playgroud)

任何数据库都会这样做,更喜欢oracle.

tda*_*ers 12

这应该适用于几乎所有SQL方言:

SELECT last_name, first_name FROM names
WHERE last_name IN (
    SELECT last_name FROM names GROUP BY last_name HAVING COUNT(*) > 1
)
Run Code Online (Sandbox Code Playgroud)

它会给你一个像这样的结果集:

Smith     Jack
Smith     Joe
Smith     Anna
Sixpack   Joe
Sixpack   Eve
Run Code Online (Sandbox Code Playgroud)

以所需格式IMO显示它的最优雅的解决方案是在客户端应用程序中以编程方式重新排列结果集,而不是拉动各种模糊的SQL特技; 类似(伪代码):

for each row in resultset
   if row[last_name] <> previous_last_name
      print newline, print last_name
   print ' '
   print first_name
Run Code Online (Sandbox Code Playgroud)


Mat*_*nen 6

假设您的服务器具有GROUP_CONCAT,因为您没有提到您正在使用的服务器:

SELECT GROUP_CONCAT(first_name SEPARATOR ' ')
FROM table
GROUP BY last_name
HAVING COUNT(first_name) > 1
Run Code Online (Sandbox Code Playgroud)

  • 我非常喜欢这个!但是现在,`GROUP_CONCAT`只在MySQL中实现.在以下链接中有一个Oracle版本,同一个博客也有PostGreSQL和SQL Server的版本.http://explainextended.com/2009/04/05/group_concat-in-oracle-10g/ (2认同)