删除所有非重复行但保留一个
delete all non-duplicate rows but keep one
在MySQL中,我有一个像这样的table
book | user | phone
445 a 69
445 g 75
445 e 22
445 l 55
332 w 57
332 u 34
332 v 87
881 o 49
我想删除所有包含 book
445
和 book
332
的行,并在末尾随机只保留其中一个。
所以table会变成
book | user | phone
445 l 55
332 w 57
881 o 49
如何在 SQL 中执行此操作?我使用 phyMyAdmin 和 PHP 5.6
谢谢
在 MySQL 中,您将使用 join
。假设 user
对于赠书是唯一的:
delete t
from t join
(select book, max(user) as maxuser
from t
group by book
) tt
where t.book = tt.book and t.user < tt.maxuser;
假设 book, user
是唯一的:
DELETE t1 FROM `table` t1, `table` t2 WHERE t1.user > t2.user AND t1.book = t2.book
如果您想保留 "highest" 用户,请将 >
更改为 <
。
给你:
DELETE FROM table1 t1, table1 t2 WHERE t1.user > t2.user AND t1.book = t2.book
用您的 table 真实姓名替换 table1
对 sagi 评论的简单更改可以帮助您轻松实现:
DELETE FROM `YourTable`
WHERE (`book`,`user`) NOT IN
(SELECT * FROM (SELECT `book`,MAX(`user`) as id from `YourTable` GROUP BY `book`) as temp)
在MySQL中,我有一个像这样的table
book | user | phone
445 a 69
445 g 75
445 e 22
445 l 55
332 w 57
332 u 34
332 v 87
881 o 49
我想删除所有包含 book
445
和 book
332
的行,并在末尾随机只保留其中一个。
所以table会变成
book | user | phone
445 l 55
332 w 57
881 o 49
如何在 SQL 中执行此操作?我使用 phyMyAdmin 和 PHP 5.6
谢谢
在 MySQL 中,您将使用 join
。假设 user
对于赠书是唯一的:
delete t
from t join
(select book, max(user) as maxuser
from t
group by book
) tt
where t.book = tt.book and t.user < tt.maxuser;
假设 book, user
是唯一的:
DELETE t1 FROM `table` t1, `table` t2 WHERE t1.user > t2.user AND t1.book = t2.book
如果您想保留 "highest" 用户,请将 >
更改为 <
。
给你:
DELETE FROM table1 t1, table1 t2 WHERE t1.user > t2.user AND t1.book = t2.book
用您的 table 真实姓名替换 table1
对 sagi 评论的简单更改可以帮助您轻松实现:
DELETE FROM `YourTable`
WHERE (`book`,`user`) NOT IN
(SELECT * FROM (SELECT `book`,MAX(`user`) as id from `YourTable` GROUP BY `book`) as temp)