2013-04-24 2 views
6

Я работаю над набором данных с тремя разными столбцами: pile, position и info.Найти дубликаты для комбинации двух столбцов в базе данных MySQL

В базе данных нет дубликата, но может случиться так, что для одной комбинации pile и position в колонке info есть один или два разных текста. И это те записи, которые я пытался найти.

Я попробовал следующее

SELECT COUNT(DISTINCT(`pile`, `position`)) FROM db; 

Но получил сообщение об ошибке

ERROR 1241 (21000): Operand should contain 1 column(s) 

Есть ли способ, чтобы найти различные комбинации значений в двух столбцах?

+0

попробовать это ** SELECT COUNT (DISTINCT ('pile' + 'position')) FROM db; ** – Luv

ответ

11

Это работает даже без подзапросов.

SELECT 
    `pile`, 
    `position`, 
    COUNT(*) AS c 
FROM 
    db 
GROUP BY 
    `pile`, 
    `position` 
HAVING c > 1; 

Команда выше показывает все комбинации pile и position, которые происходят более чем один раз в таблице db.

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 
+0

Вы не должны анализировать ... – Rog

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, или любую комбинацию полей (для {полюсу, ПОлОжЕНИЕ}, конечно, за исключением)