【问题标题】:Mysql - deleting second entryMysql - 删除第二个条目
【发布时间】:2012-05-16 21:38:19
【问题描述】:

我们有一个 mysql 数据库表,其中包含一些需要删除的错误条目。 account表有以下字段:id、code、user_id

基本上,每个用户在每个帐户的帐户表中应该只有一条记录。但是,目前每个用户的账户表中有两条记录,代码等于1000。

对于帐户表中的每条记录,我需要删除每个用户的代码 = 1000 的第二行。

下面的查询给了我所有 code = 1000 的记录。它还包含对 account_detail 表的计数,以确认第二个错误条目不包含 account_detail 表中的任何子记录,并且已确认这是正确的.

SELECT a.*, COUNT(ad.id)
FROM account a
LEFT JOIN account_detail ad on a.id = ad.account_id
WHERE a.code = 1000
GROUP by a.id
ORDER BY a.user_id, a.id

所以,现在我基本上需要一个查询来删除帐户表中每个 user_id 的第二个错误条目,其中代码 = 1000

【问题讨论】:

  • 如果您从 2 个表中发布一些示例数据会更好。

标签: mysql


【解决方案1】:
DELETE greater
FROM   account AS lower JOIN account AS greater
    ON lower.code    = greater.code
   AND lower.user_id = greater.user_id
   AND lower.id      < greater.id
WHERE  lower.code    = 1000

【讨论】:

  • 不,不会工作。我们需要为每个用户保留 code = 1000 的帐户表中的第一个条目,即使 ad.account_id 为空
  • @JonoB: 如果ad.account_id IS NULL 也用于第一条记录,那么account_detail 中对于either 记录没有对应的条目,对吗?在那种情况下,你如何确定哪个是“第一”,哪个是“第二”记录?
  • OP 中的查询有一个 order by 子句:`ORDER BY a.user_id, a.id,所以第二个 a.id 总是比第一个大。不过,通过使用我的第一个查询,然后循环遍历 php 中的结果并提取每个第二个帐户的 ID,我已经基本解决了这个问题。不过感谢您的帮助。
  • @JonoB:很公平。或者使用我上面修改后的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-29
  • 1970-01-01
  • 2020-08-09
  • 2019-02-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多