2011-11-25 73 views
-1

我有2个表:jobjob_working_time只删除重复的ID

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 =离开,R =删除

  • 1 - 1(升)
  • 1 - 1(R)
  • 1 - 2(1)
  • 1 - 3(升)
  • 1 - 1(R)
  • 2 - 1(L)
  • 2 - 1(R)
  • 2 - 2(1)

在此先感谢

[后来编辑] 有一件事你应该考虑: 不管怎么说,当我想删除ID时,会删除它的所有值。所以,这个想法是保留该ID的所有值,所以稍后我可以添加没有重复。这就是为什么检索id和value都很重要,但不重复的内容。 SQL应该返回上述的所有(l)值。名单。

回答

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/

+0

我们不想失去同一个id的不同值,只能重复值。选择应返回ID的所有值,但不能重复值。 – danielpopa

+0

你不会失去任何不同的完全不同的行,它检查“是全行相同”,如果任何列diffirent,选择它 –

+0

你试过你的SQL吗?我不想粗鲁,谢谢你的关注,但DISTINCT对我的情况没有帮助。 – danielpopa

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 (...) 

相貌丑陋,但速度很快(中等功能性能比不在(...)中快)。

+0

如果同一个ID有两个不同的值,你的解决方案将失去第一个值(稍后检查编辑以获得更多解释) – danielpopa