我有两张桌子:job
和job_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
提前致谢
[稍后编辑] 你应该考虑一件事: 无论如何,当我想删除ID时,将删除它的所有值。因此,我们的想法是保留该id的所有值,以便稍后我可以添加不重复的值。这就是为什么检索id和值非常重要,而不是重复内容。 SQL应返回上述所有(l)值,例如:列表。
答案 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
修改强>
添加了示例
答案 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功能性能比(...)更快)。