如何找到重复的行?如果last_name是重复字段,我想要显示
last_name frst_name frst_name1 frst_name2 ....
任何数据库都可以,更喜欢oracle。
答案 0 :(得分: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
)
它会给你一个像这样的结果集:
Smith Jack
Smith Joe
Smith Anna
Sixpack Joe
Sixpack Eve
以所需格式IMO显示它的最优雅的解决方案是在客户端应用程序中以编程方式重新排列结果集,而不是拉动各种模糊的SQL特技;像(伪代码):
for each row in resultset
if row[last_name] <> previous_last_name
print newline, print last_name
print ' '
print first_name
答案 1 :(得分:6)
假设你的服务器有GROUP_CONCAT,因为你没有提到你正在使用的那个:
SELECT GROUP_CONCAT(first_name SEPARATOR ' ')
FROM table
GROUP BY last_name
HAVING COUNT(first_name) > 1
答案 2 :(得分:3)
SELECT last_name, first_name FROM names n1
WHERE
(
SELECT count(*) FROM names n2 where n2.last_name = n1.last_name
)
> 1
或表是否具有唯一标识符
SELECT last_name, first_name FROM names n1
WHERE exists
(
SELECT id FROM names n2 where n2.last_name = n1.last_name and n1.id <> n2.id
)
答案 3 :(得分:2)
Select a.* from persons a inner join persons b on (a.personID<>b.PersonID and a.last_name=b.last_name)
PersonID是您桌子的主键。
答案 4 :(得分:2)
我不知道这是不是你要求的,但我认为你在寻找的是
SELECT * FROM users u1, users u2
WHERE (u1.last_name = u2.last_name AND COUNT(u1.last_name) > 1))
答案 5 :(得分:1)
我尝试设计一种适用于大多数符合ANSI标准的SQL数据库服务器的解决方案。这就是我想出来的。
这里的想法是,您确定重复的last_name
,然后提取所有具有其中一个重复项的记录。
SELECT
t.last_name, t.frst_name, t.frst_name1, t.frst_name2, ...
FROM our_table AS t
WHERE t.last_name IN (
SELECT t0.last_name
FROM our_table AS t0
GROUP BY t0.last_name
HAVING COUNT(*) > 1
)
ORDER BY
t.last_name, t.frst_name, t.frst_name1, t.frst_name2, ...
;
答案 6 :(得分:0)
假设&#34;在表客户中,您将客户密钥作为PK&#34;然后你可以使用:
select
customerkey,count(customerkey)
from
customer
group
by customerkey
having
count(customerkey)>1;
这将为您提供所有重复的customerkeys。现在你可以删除它们。