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

您可以使用自联接来提取要删除的数据。在查询中两次使用同一个表时,您需要使用别名来区分这些表。这就是我使用t1t2别名的原因。

通过加入,结果(将被删除)将仅是与内部联接匹配的记录。

SQLFiddle 演示

于 2013-09-05T12:19:45.357 回答