2011-11-25 4 views
-1

복제합니다. 그것은 도움이되지만 그것은 내 문제가 해결되지 않습니다제거 단지 내가 2 개 테이블을 가지고 IDS

나는 단지 중복과 IDS를 들어, 중복 제거 등 할
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 

: 난 = 남겨 r은 =

  • 1 제거 - (1 l)
  • 1-1 (R)
  • (가) 1 - 2 (l)
  • 1 - (l)
  • 1-1 (R)
  • 2-1 (L)
  • 1 - 2 (R)
  • 2-2 (L) 사전에

감사

[나중에 편집] 은 한 가지 당신이 고려해야합니다 를 어쨌든 , ID를 삭제하려면 해당 값을 모두 제거합니다. 따라서이 아이디어에 대한 모든 값을 유지하는 것이므로 나중에 중복없이 추가 할 수 있습니다. 그래서 ID와 값 모두를 검색하는 것이 중요하지만 중복되는 내용은 중요하지 않습니다. SQL은 위의 (l) 값을 모두 반환해야합니다. 명부.

답변

1

귀하의 예를 들어 당신은 어떤 행이

DISTINCT 당신

가 선택 완전히 diffirent 행

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에 대해 다른 값을 잃고 싶지는 않으며 값만 중복됩니다. Select는 ID에 대한 모든 값을 반환해야하지만 중복 값은 반환하지 않아야합니다. – danielpopa

+0

뚜렷한 전체 diffirent 행을 잃지 않을 것입니다, 열의 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에 대해 2 개의 다른 값이있는 경우 솔루션에서 첫 번째 값이 풀립니다 (자세한 내용은 나중에 확인하십시오) – danielpopa

관련 문제