1

テーブルからいくつかのランダム データを削除し、90% の行をカットしたい (データが非常に大きいため、サンプルが必要なだけです)、テーブルは次のようになります。

ID    |Trans_No    |Doctor_ID |Trans_Type                    |PM |Cost
12340 |10.853329   |          |ADMINISTRASI                  |   |0.00
12341 |10.853329   |1004      |JASA MEDIS                    |   |25000.00
12342 |10.853329   |          |OBAT RESEP FARMASI NO : 177   |F  |2000.00
12343 |10.836033   |          |ADMINISTRASI                  |   |0.00
12344 |10.836033   |1001      |JASA MEDIS                    |   |25000.00
12345 |10.836033   |          |OBAT RESEP FARMASI NO : 317   |F  |0.00
12346 |10.836032   |          |ADMINISTRASI                  |   |0.00
12347 |10.836032   |1004      |JASA MEDIS                    |   |25000.00
12348 |10.836032   |          |PEMERIKSAAN RADIOLOGI NO 092.1|R  |15000.00
12349 |10.836034   |1064      |JASA MEDIS                    |   |25000.00
12350 |10.836034   |          |PEMERIKSAAN RADIOLOGI NO 093.1|R  |20000.00

このクエリはうまくいくと思います:

DELETE FROM my_table WHERE RAND() <= 0.9

しかし、ご覧のとおり、一部のデータには同じtrans_noがあり、1つのtrans_noが削除された場合、同じtrans_noを持つ他のデータを削除する必要があります。これを行うクエリはありますか?

4

2 に答える 2

3

次のように、最初に対象を選択trans_noしてから削除する必要があります。

DELETE FROM my_table
WHERE trans_no IN (
    SELECT trans_no
    FROM (SELECT DISTINCT trans_no FROM my_table) x
    WHERE rand() <= 0.9
)
于 2013-01-02T05:37:16.130 に答える
2

これには内部クエリが必要です。

trans_noまず、削除する を見つける必要があります

    SELECT 
            trans_no
    FROM 
           (SELECT DISTINCT trans_no FROM my_table)
    WHERE rand()

次に、このような個別の削除クエリが必要です

DELETE FROM my_table WHERE trans_no IN (Put the above query here)

ついに

DELETE FROM my_table WHERE  trans_no IN (
        SELECT 
                trans_no
        FROM 
               (SELECT DISTINCT trans_no FROM my_table) as derived_table
        WHERE rand()
)
于 2013-01-02T05:49:37.607 に答える