2017-10-19 16 views
0

は、私はこのようなMySQLのテーブルを持っている:異なるスラッグを持つ重複したエントリを見つける方法は?

id | user_id | title | slug 
------------------------------ 
1 | 1  | hello | hello 
2 | 1  | hello | hello-1 
3 | 2  | bye | bye 
5 | 3  | bye | bye-1 

私は重複したエントリを見つけたいです。同じuser_id、title、および " - "で終わるスラッグを持つエントリ。

これらは重複している:

3 | 2  | bye | bye 
5 | 3  | bye | bye-1 

は、どのように私はこれらの重複を見つけることができます:user_idは年代が異なるため

1 | 1  | hello | hello 
2 | 1  | hello | hello-1 

そしてこれらは、ありませんか?

答えて

2

一つの簡単な方法は、ナメクジを一緒に連結します。

select user_id, title, group_concat(distinct slug) 
from t 
group by user_id, title; 

これは、1つの行にそれらのすべてを置きます。また、あなたはexistsを使用することができます。

select t.* 
from t 
where exists (select 1 
       from t t2 
       where t2.user_id = t.user_id and 
        t2.title = t.title and 
        t2.slug <> t.slug 
      ); 
+0

ありがとう、最初のクエリは私のために働いた。 :) –

0

あなたはCOUNT(*)を有する使用をcound> A関連タイトル

select * from my_table m 
inner join (
    select title 
    from my_table 
    group by title 
    having count(*) >1 
) t on t.title = m.title 
0

に参加するだけで、ナメクジが異なることはありませんと仮定し、答えを受け入れたように私には見えます彼らはただ「-1」の部分は異なる可能性があること、言うことのようにそれは... OPが探していたものです:重複行の

1 | 1  | hello | hello 
2 | 1  | hello | other 

結果、彼らはそうではありません。 だから、「-1」の問題を解決するためにtrys上記のクエリ

SELECT * 
    FROM yourTable A1 
    WHERE EXISTS 
      (
      SELECT 1 
      FROM yourTable A2 
      WHERE A1.title = A2.title 
       AND A1.user_id=A2.user_id 
       AND (A1.slug=A2.slug OR A1.slug = CONCAT(A2.slug, "-1"))    
      LIMIT 1, 1 
      ) 

...他人とOPで例示として使用される値のために動作しますが、ありません。

関連する問題