【问题标题】:DELETE duplicate rows from a table and its corresponding data in another table in mysql从一个表中删除重复的行及其在mysql中另一个表中的相应数据
【发布时间】:2017-04-07 04:53:04
【问题描述】:

考虑一下我有一个这样的表结构,

id    Email
-----------
1    abc@gmail.com
2    abc1@gmail.com
3    abc@gmail.com
4    abc@gmail.com
5    abc@gmail.com

还有一张桌子

id   userId     name
---------------------
1    1          A
2    2          B
3    3          C
4    4          D
5    5          E

现在,如果我想从表 1 中删除重复项,即应从 table1 中删除 2, 3, 4, 5 及其在 table2 中的相应数据。

我该怎么做?
这可能吗?

【问题讨论】:

标签: php mysql


【解决方案1】:

首先尝试使用以下代码保留用户表中的重复行:

DELETE FROM `user` WHERE `id` NOT IN (select * from ( SELECT MIN(`id`) FROM `user` GROUP BY `email` ) as t)

其次尝试通过以下操作从另一个表中删除其他依赖行:

DELETE FROM `user_data` WHERE `u_id` NOT IN (select * from ( SELECT MIN(`id`) FROM `user` GROUP BY `email` ) as t) 

希望这对你有用。

【讨论】:

  • 你会尝试用“exists”而不是“in”吗?
【解决方案2】:

以 DML 方式,对您的表尝试以下查询(根据您的表进行编辑)。注意:删除可以回滚。

DELETE t1
FROM t1, holdkey
WHERE t1.col1 = holdkey.col1
AND t1.col2 = holdkey.col2

【讨论】:

  • 我想对重复的部分进行细化,然后删除它们。
  • 以上查询将帮助您删除。要查找重复项,请尝试:SELECT email, COUNT( * ) FROM table_name GROUP BY email HAVING COUNT( * ) > 1 更多检查:stackoverflow.com/questions/2594829/…
  • 我已经尝试过了,要求是我是否只能使用一个查询来做到这一点??
  • 我觉得我的回答已经足够了。 DELETE 查询是唯一的单向查询。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-07
  • 1970-01-01
  • 2018-12-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多