仅删除重复的ID

时间:2011-11-25 09:59:43

标签: mysql

我有两张桌子:jobjob_working_time

job: id (Increment, Index, Unique)
job_working_time: job_id(allow multiple), property_working_time

此SQL查询返回具有多个值或重复项的ID。它有所帮助,但它不能解决我的问题:

SELECT a.id AS id, count( b.job_id ) AS cnt, b.property_working_time AS value
FROM job a
INNER JOIN job_working_time b ON a.id = b.job_id
GROUP BY b.job_id
HAVING cnt >1

我想删除重复项,仅针对具有重复项的ID,例如:l = leave,r = remove

  • 1 - 1(l)
  • 1 - 1(r)
  • 1 - 2(l)
  • 1 - 3(l)
  • 1 - 1(r)
  • 2 - 1(l)
  • 2 - 1(r)
  • 2 - 2(l)

提前致谢

[稍后编辑] 你应该考虑一件事: 无论如何,当我想删除ID时,将删除它的所有值。因此,我们的想法是保留该id的所有值,以便稍后我可以添加不重复的值。这就是为什么检索id和值非常重要,而不是重复内容。 SQL应返回上述所有(l)值,例如:列表。

2 个答案:

答案 0 :(得分:1)

由于您的示例看起来不希望任何行相同

DISTINCT将为您效劳

它选择完全不同的行

SELECT DISTINCT a.id AS id, count( b.job_id ) AS cnt, b.property_working_time AS value
FROM job a
INNER JOIN job_working_time b ON a.id = b.job_id
GROUP BY b.job_id
HAVING cnt >1

修改

添加了示例

http://data.stackexchange.com/stackoverflow/q/119267/

答案 1 :(得分:0)

第一个/简单查询:

SELECT id, field, count(*) c from ... group by  field having c >1

第二个查询,修改了要删除的ID:

SELECT  instr(s,mid(s,',')+1) from (
SELECT group_concat(id) s, count(*) c from ... group by  field having c >1)z

和结束:

Delete FROM ... WHERE id in ( ...)

看起来很丑,但速度很快(Mid功能性能比(...)更快)。