0

フィールドが部分的にのみ一致し、一致するフィールドの内容が任意であるユーザー テーブルで重複レコードを返そうとしています。うまく説明できているかどうかわからないので、一意のフィールドで重複するメンバーを取得するために実行するクエリを次に示します。

SELECT MAX(id)
FROM members
WHERE 1
GROUP BY some_unique_field
HAVING COUNT(some_unique_field) > 1

これと同じ考え方を電子メール フィールドに適用したいのですが、残念ながら電子メール フィールドにはコンマで区切られた複数の電子メールを含めることができます。たとえば、メール アドレスが "user@someaddress.com" に設定されているメンバーを、フィールドに "user@someaddress.com"、"someotheruser@someaddress.com" を持つ別のメンバーの複製として返してほしいと考えています。GROUP BY明らかに、これをそのまま達成することはできません。

4

2 に答える 2

0

このようなものがうまくいくかもしれません:

SELECT *
FROM members m1
inner join members m2 on m1.id <> m2.id
    and (
        m1.email = m2.email
        or m1.email like '%,' + m2.email
        or m1.email like m2.email + ',%'
        or m1.email like '%,' + m2.email + ',%'
    )   

複数のメールアドレスがある場合、メールアドレスがどの程度一貫してフォーマットされているかによって異なります。コンマの後に常にスペースがある場合、または引用符が実際にデータの一部である場合など、クエリを少し変更する必要がある場合があります。

于 2010-01-21T21:16:22.290 に答える
0

これは私にとってはうまくいきます。あなたが望むことをしないかもしれません:

SELECT MAX(ID) FROM members WHERE Email like "%someuser%" GROUP BY Email HAVING COUNT(Email) > 1

于 2010-01-21T21:28:08.143 に答える