我处理的数据集包含三个不同的列:pile
,position
和info
。
数据库中没有重复,但可能会发生,对于pile
和position
的一个组合,信息列中有一个或两个不同的文本。这些是我试图找到的条目。
我尝试了以下
SELECT COUNT(DISTINCT(`pile`, `position`)) FROM db;
但收到了错误消息
ERROR 1241 (21000): Operand should contain 1 column(s)
有没有办法在两列中找到不同的值组合?
答案 0 :(得分:18)
即使没有子选择也可以。
SELECT
`pile`,
`position`,
COUNT(*) AS c
FROM
db
GROUP BY
`pile`,
`position`
HAVING c > 1;
上面的命令显示pile
和position
的所有组合,这些组合在表db
中出现多次。
答案 1 :(得分:0)
获取不同重复项的计数(此处优先使用组)
select count(*)
from (
select pile, position
from db
group by pile, position
) x
查找实际的重复记录
select db.*
from (
select pile, position
from db
group by pile, position
having count(*) > 1
) x
join db on db.pile = x.pile and db.position = x.position
答案 2 :(得分:0)
SELECT *
FROM db x
WHERE EXISTS (
SELECT 1 FROM db y
WHERE y.pile = x.pile
AND y.position =x.postion
AND y.other_field <> x.other_field
);
现在,对于other_field
,您可以使用一些唯一的id列或任何字段组合(当然除了{pole,postion}之外)