6

行の 10% を削除したいとしましょう。これを行うためのクエリはありますか?

何かのようなもの:

DELETE FROM tbl WHERE conditions LIMIT (SELECT COUNT(*) FROM tbl WHERE conditions) * 0.1
4

2 に答える 2

4

行の約10%のみが必要な場合、特定の順序ではなく、これでうまくいくはずです。

DELETE FROM tbl WHERE RAND() <= 0.1

ただし、乱数を生成するオーバーヘッドがあるため、非常に大きなデータ セットで使用することはお勧めしません。

于 2012-04-28T11:22:50.817 に答える
3

フィルタリングされた行の合計量を返し、php で計算し、その値を DELETE クエリの制限として使用するだけです。

$query = mysql_query("SELECT COUNT(*) FROM tbl WHERE conditions");
$int = reset(mysql_fetch_array($query));
$int = round($int * 0.1);

mysql_query("DELETE FROM tbl WHERE conditions LIMIT {$int}");

DELETE で次のような高度なクエリが許可されるかどうかはわかりません。

DELETE FROM (   SELECT h2.id
                FROM (  SELECT COUNT(*) AS total
                        FROM tbl
                        WHERE conditions) AS h
                JOIN (  SELECT *, @rownum := @rownum + 1 AS rownum
                        FROM tbl, (SELECT @rownum := 0) AS vars
                        WHERE conditions) AS h2
                ON '1'
                WHERE rownum < total * 0.1) AS h3
于 2012-04-28T11:19:50.957 に答える