如何检查列的重复值并返回包含它们的行

时间:2016-12-10 12:22:37

标签: mysql

我正在编写一个运行SQL的脚本。查询是检查拾取的列(在本例中为kolumna1,kolumna2或kolumna3)是否有重复值。然后,在找到这些值之后,我想返回包含此值的每一行。例如,查看我的表,如果我查看kolumna1列,其中一个重复值将在行(id)2和8中。所以在这种情况下我想返回整个第二行和第八行。 当然主要目标是返回具有重复值的每一行,这只是一个更简单的例子。

表格:

INSERT INTO `tabela_testowa` (`id`, `kolumna1`, `kolumna2`, `kolumna3`, `kolumna4`) VALUES
(1, 'wartosc1', 'wartosc2', 'wartosc3', 1),
(2, 'warosc21', 'wartosc22', 'wartosc23', 5),
(3, 'wartosc31', 'wartosc22', 'wartosc32', 6),
(4, 'wartosc54', 'wartosc43', 'wartosc45', 4),
(5, 'wartosc43', 'wartosc23', 'wartosc34', 4),
(6, 'wartosc43', 'wartosc54', 'wartosc43', 2),
(7, 'wartosc54', 'wartosc52', 'wartosc53', 8),
(8, 'wartosc21', 'wartosc22', 'wartosc43', 4),
(9, 'wartosc43', 'wartosc33', 'wartosc45', 9),
(10, 'wartosc87', 'wartosc62', 'wartosc11', 3);

到目前为止,我设法编写了一个几乎正常运行的查询。几乎我的意思是它返回重复项,但每次只返回一次。

查询:

SELECT id, kolumna1 
FROM tabela_testowa
GROUP BY kolumna1
HAVING ( COUNT(kolumna1) > 1 );

编辑:我正在使用mysql。另外,为了澄清我想只搜索我在搜索重复值时选择的一列,然后显示包含它们的整行(当然我指的是两行,如第2行和第8行)。

1 个答案:

答案 0 :(得分:0)

如果没有错,你正在寻找这个

适用于MysqlSql Server

Correlated Sub-Query方法

select * 
from Yourtable A
Where Exists (select 1 from Yourtable B where a.kolumna1 =b.kolumna1  
              HAVING  COUNT(1) > 1 )

另一种方法,过滤kolumna1,它有多个记录并加入你的表

Select A.* From Yourtable A
(
select kolumna1 
From Yourtable
Group by kolumna1 
Having Count(1) > 1
) B 
ON A.kolumna1= B.kolumna1 

更新:别名的范围在选择查询结束时结束,您无法像这样使用它。试试这种方式

SELECT *
FROM   tabela_testowa tab1
WHERE  EXISTS (SELECT 1
               FROM   tabela_testowa tab2
               WHERE  tab1.kolumna1 = tab2.kolumna1
               HAVING Count(1) > 1) 

如果您使用SQL SERVER

Select * From
(
select *,Count(1)Over(Partition by kolumna1) as cnt
from Yourtable 
)A
Where cnt > 1