如何从不符合某些条件的表中移除行

如何从不符合某些条件的表中移除行

问题描述:

我遇到了一个问题,至今我找不到答案。如何从不符合某些条件的表中移除行

我有这样的一个表:

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

如何删除行,这已经不在column2和栏3的最高值,(Column2优先)?

结果应该是这样的:

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

你有什么试过?我建议你用几个更简单的问题来分解你的复杂问题。 – Jocelyn 2013-02-21 18:17:09

+0

我可以通过删除重复后使用ALTER IGNORE TABLE'table' ADD UNIQUE KEY idx1(column1,column2,column3) - 现在我更新我的第一篇文章 – user2096557 2013-02-21 18:20:17

你可以使用这样的查询:

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

+0

这一个完全正常工作。但是,我不确定我是否问过正确的问题。非常感谢 – user2096557 2013-02-25 09:50:18

删除使其混乱,但这些都是要保持的行:

SELECT 
    a.col1, a.col2, b.col3 
FROM 
    (select col1, max(col2) as col2 from table1 group by col1) as a INNER JOIN 
    (select col1, col2, max(col3) as col3 from table1 group by col1, col2) as b 
    ON 
     a.col1 = b.col1 AND a.col2 = b.col2; 

你可以简单地删除由@fthiella指出,不在此查询的行。

看到这个link

+0

我还没有尝试过,因为从fthiella上面的答案工作正常。我会在稍后尝试,当我有更多时间玩替代品。非常感谢 – user2096557 2013-02-25 09:51:20