1

次の形式のテーブルがあります。

`users`
- id
- views
- email

これが私が持っているいくつかのエントリです:

`id`        `email`                 `likes`
9570800   -anroy@gmail.com      888
5355388   -Btionz@gmail.com     3042
8610061   -cmendez@naia.org         450
6189810   -dancox_photog@yahoo.co.uk 0
6625684   -david.d.@gmail.com        0
16841675  -david.d.@gmail.com        40
9716153   -david.d.@gmail.com        0
9716353                              0
97161453                             0

メールが重複してDELETEいるすべてのエントリを作成し、最も高いエントリを保持しますlikes。たとえば、上記の場合、の重複は、-david.d.@gmail.com 両方6625684とも9716153削除され、16841675保持されます(重複の中で最もいいねが多いため)。

また、emailが空白(''またはNULL)の場合は無視するか、削除しないでください。

このクエリをどのように実行しますか?

4

3 に答える 3

2
DELETE lesser FROM MyTable AS greater JOIN MyTable AS lesser USING (email)
WHERE greater.email <> '' AND greater.likes > lesser.likes;
于 2013-03-27T03:42:39.560 に答える
0
DELETE FROM Users WHERE NOT userid in (
    SELECT userid FROM Users u 
        INNER JOIN (SELECT userid,max(likes) ml FROM Users GROUP BY userid) u2
           ON u.userid = u2.userid AND u.likes = u2.ml
    )
于 2013-03-27T03:43:12.750 に答える
0

まず、注意してください。削除の可能性のあるリストを確認します。

SELECT * FROM users
INNER JOIN (
  SELECT email, max(likes) max_likes FROM users GROUP BY email HAVING count(*) > 1
) keep ON users.email = keep.email
WHERE users.likes <> keep.max_likes

次に、それで問題がないように見える場合は、次のように置き換えSELECT *ますDELETE users

于 2013-03-27T03:43:21.280 に答える