Php 删除所有不重复的行,但保留一行
在MySQL中,我有这样一个表Php 删除所有不重复的行,但保留一行,php,mysql,sql,sql-delete,delete-row,Php,Mysql,Sql,Sql Delete,Delete Row,在MySQL中,我有这样一个表 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 我想删除包含书445和书332的所有行,并在末尾随机保留其中一行 因此,这张桌子将成为 book | user | phone 445
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
我想删除包含书445和书332的所有行,并在末尾随机保留其中一行
因此,这张桌子将成为
book | user | phone
445 l 55
332 w 57
881 o 49
如何在SQL中实现这一点?我使用phyMyAdmin和PHP5.6
谢谢在MySQL中,您可以使用join。假设用户对于给定书籍是唯一的:
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;
假设用户是唯一的:
DELETE t1 FROM `table` t1, `table` t2 WHERE t1.user > t2.user AND t1.book = t2.book
将>更改为现在开始:
DELETE FROM table1 t1, table1 t2 WHERE t1.user > t2.user AND t1.book = t2.book
将表1替换为实际的表名对sagi comment进行简单的更改可以帮助您轻松完成以下任务:
DELETE FROM `YourTable`
WHERE (`book`,`user`) NOT IN
(SELECT * FROM (SELECT `book`,MAX(`user`) as id from `YourTable` GROUP BY `book`) as temp)
什么逻辑决定了445,保留的是l而不是445,a/g/e?@AlexK。没什么。这是随机的。就留一个吧。谢谢这是我答案的精确副本是真的。我的是提前2分钟;但我想这是常识。没有伤害,没有犯规-@不,是的!可能是当时我正在打答案,没有意识到。你想让我收回我的答案吗?@Fakhruddinojjainwala对不起,什么是表1 t1,表1 t2?我想表1是我的表的名字,但是t1,t2,它们来自哪里?它们是用于在执行查询时传递数据的虚拟表吗?谢谢,这是桌子的别名,请用表1代替表1。对不起,我想t是我桌子的名称,对吗?那么,tt是什么?谢谢