1

質問の言い方がわからないので、答えを見つけるのに苦労しました。私のデータは次のようになります。

+------+-------+------------+----+
| id   | block | repetition | x  |
+------+-------+------------+----+
| 5223 | 1     | 1          | 15 |
| 5223 | 1     | 2          | 17 |
| 5223 | 1     | 3          | 16 |
| 5223 | 2     | 1          | 14 |
| 5223 | 2     | 2          | 15 |
| 6238 | 2     | 1          | 18 |
| 6238 | 2     | 2          | 20 |
| 6238 | 2     | 3          | 20 |  
| 6238 | 2     | 4          | 21 |
+------+-------+------------+----+

x < 15 (単なる例) を検出した場合、ブロック全体 (列) を削除するようにテーブルにクエリを実行したいと思います。この例では、行 4 と 5 を削除する必要があります。

4

1 に答える 1

1
delete t1
from your_table t1
inner join
(
    select id, block
    from your_table
    group by id, block
    having sum(x < 15) > 0
) t2 on t1.id = t2.id and t1.block = t2.block

自己結合を使用して、削除するデータを抽出できます。クエリで同じテーブルを 2 回使用する場合は、テーブルを互いに区別するためにエイリアス名を使用する必要があります。そのため、t1およびt2エイリアス名を使用しました。

結合すると、結果(削除される)は内部結合に一致するレコードのみになります。

SQLFiddle デモ

于 2013-09-05T12:19:45.357 に答える