我遇到了一个问题,到目前为止我找不到答案。

我有一张这样的桌子:

column1 | column2 | column3
---------------------------
name1   | 3       | 12
name1   | 3       | 10
name1   | 2       | 17
name2   | 3       | 15
name2   | 3       | 15
name2   | 2       | 11


如何删除在column2和column3中没有最高值的行(Column2具有优先级)?

结果应如下所示:

column1 | column2 | column3
---------------------------
name1   | 3       | 12
name2   | 3       | 15
name2   | 3       | 15

最佳答案

您可以使用如下查询:

DELETE FROM yourtable
WHERE
  (column1, column2, column3) NOT IN (
    SELECT * FROM (
      SELECT yourtable.column1, yourtable.column2, max(column3) max_column3
      FROM
        yourtable INNER JOIN (
          SELECT   column1, max(column2) max_column2
          FROM     yourtable
          GROUP BY column1) mx
        ON yourtable.column1=mx.column1
           AND yourtable.column2=mx.max_column2
      GROUP BY
        yourtable.column1) s
  )


请参阅小提琴here

关于mysql - 如何从不符合某些条件的表中删除行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15009240/

10-11 02:50