获取列a和b的排列唯一的所有行

时间:2019-01-22 20:02:17

标签: mysql sql

我正在尝试从column_acolumn_b的排列唯一的表中获取所有行

column_a column_b
1         2
1         5
2         1
1         2

查询应选择

column_a column_b
1         2
1         5
2         1

我已经看过其他有关此问题的文章,但是它们似乎都专注于两个列的唯一性,因此column_a永远不能两次显示相同的值。这不是我想做的。


更好的情况是有一个查询来选择此排列不是唯一的所有行-我这样做的原因是我随后需要运行一些逻辑来确定需要保留哪些重复行以及哪些要保留需要删除。

3 个答案:

答案 0 :(得分:2)

DISTINCT过滤掉重复的。请注意,DISTINCT适用于整行。

select distinct column_a, column_b from my_table

第二个问题:

  

...一个查询,它选择此排列不是唯一的所有行...

select column_a, column_b
from my_table
group by column_a, column_b
having count(*) > 1

答案 1 :(得分:1)

这将为您提供独特的组合:

SELECT a, b
FROM theTable
GROUP BY a, b
HAVING COUNT(*) = 1;

...将=更改为<>会得到非唯一的。

如果您要消除重复项,并且拥有另一个标识字段(例如自动递增的PK),则只需选择MIN(id)MAX(id)即可选择要保留的字段与配对。

答案 2 :(得分:0)

我赞成先前的答案,因为它们为主要问题提供了答案:

fetch all rows from a table where the permutation of column_a and column_b is unique

但是,我最终还是结合了提供给find all rows where the permutation of column_a and column_b is not unique的答案。原因是我想查看所有重复column_acolumn_b的行,而不仅仅是其中之一。

以下是查询:

SELECT column_a, column_b
FROM table 
WHERE id NOT IN (
    SELECT id
    FROM table
    GROUP BY column_a, column_b
    HAVING COUNT(*) = 1
)