如何从不符合某些条件的表中移除行
问题描述:
我遇到了一个问题,至今我找不到答案。如何从不符合某些条件的表中移除行
我有这样的一个表:
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
答
你可以使用这样的查询:
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
你有什么试过?我建议你用几个更简单的问题来分解你的复杂问题。 – Jocelyn 2013-02-21 18:17:09
我可以通过删除重复后使用ALTER IGNORE TABLE'table' ADD UNIQUE KEY idx1(column1,column2,column3) - 现在我更新我的第一篇文章 – user2096557 2013-02-21 18:20:17