MySQL基于单一标准删除

时间:2013-09-05 12:18:21

标签: mysql sql-delete

我不确定如何表达我的问题,因此我很难找到任何答案。我的数据看起来像这样:

+------+-------+------------+----+
| 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行。

1 个答案:

答案 0 :(得分: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 demo