如何从MySQL中删除重复的行?删除

时间:2016-10-25 19:05:45

标签: mysql sql

下午好,我是社区的新手,如果我当时做错了问这个问题请纠正我,我将不胜感激。 我有一个表包含两列phone_number名称和状态。

Phone_number    status
“9999999999”    “A”

我需要删除T1和T2之间的重复项,如果它们具有相同的phone_number,但我想创建具有状态的数字'' A'&#39 ;;

我试图解决这个问题,但是有些东西丢失了,因为它给了我结果不是我想要的。

DELETE t1.*
FROM
  tablename t1 INNER JOIN tablename t2
  ON t1.phone_number = t2.phone_number
     AND t1.status !="A"

有人能帮助我吗?

3 个答案:

答案 0 :(得分:0)

我不清楚在T1和T2之间删除"删除"手段。您显然只是试图从示例代码中删除T1。

如果表格的t2中有一行(同一个phone_number,' A'),以下内容将从表格的t1(phone_number,而不是' A')中删除行。如果T1 = T2,那么这将删除T1中与同一电话号码重复的所有行,只留下状态为“A'”的电话号码副本。

从t1删除    其中t1.status!=' A'和          t1.phone_number in(选择phone_number                                    从t2开始 其中t2.phone_number = t1.phone_number和t2.status =' A');

答案 1 :(得分:0)

如果我理解正确的话,当另一个表的状态为A时,从一个表中删除;如果是这样,那么你需要两个删除:

DELETE t1
FROM
  tablename t1 INNER JOIN tablename t2
  ON t1.phone_number = t2.phone_number
  AND t1.status !='A' AND t2.status='A'

DELETE t2
FROM
  tablename t1 INNER JOIN tablename t2
  ON t1.phone_number = t2.phone_number
  AND t1.status ='A' AND t2.status !='A'

答案 2 :(得分:0)

另一种方法可能是从t1中仅选择不同的行并将它们插入新表中:

CREATE TABLE newtable LIKE `table`;
INSERT INTO `newtable` SELECT DISTINCT * FROM `table`;

之后,您可以适当地重命名两个表。当然,这只有一次意义。