3

テーブルxにsourceという名前の列があるとします。個々のエントリは次のようになります。

Id   c1   c2      source ...
1    a     b      something
2    b     a      something  
3    a     b      somethingelse
4    c     a      somethingelse
5    a     b      something
6    b     c      something

ソース内の同じ要素が3つ未満のエントリを削除するにはどうすればよいですか?たとえば、ソース値somethingelseが2回表示されるため、 somethingelseを削除したすべてのエントリが必要です。

4

4 に答える 4

4
DELETE  a
FROM    tableName a
        INNER JOIN
        (
            SELECT  source
            FROM    tableName
            GROUP BY SOURCE
            HAVING COUNT(*) < 3
        ) b ON a.source = b.source

パフォーマンスを高速化するためにもう1つ行うことは、列にINDEXを追加するSOURCEことです。

于 2013-01-16T15:21:58.307 に答える
0

大まかにこのようなものが仕事をします

DELETE FROM TABLE_T1 WHERE ID IN (
   SELECT ID FROM TABLE_T1 GROUP BY SOURCE HAVING COUNT(*) < 3
)
于 2013-01-16T15:22:25.120 に答える
0
DELETE  id
FROM    yourtable a
JOIN    (
        SELECT  *
        FROM    yourtable
        GROUP BY
                source
        HAVING  COUNT(*) > 3
        ) b
ON      a.id = b.id
于 2013-01-16T15:25:28.987 に答える
0
DELETE FROM x WHERE id IN
( SELECT id FROM
  ( SELECT id, COUNT(source) AS n
      FROM x GROUP BY source 
      HAVING n < 3
  )
)
于 2013-01-16T15:26:21.057 に答える