2014-02-25 2 views
3

activity_logs에는 material_name, user_id, mod_result (이 경우 통과/실패의 테스트 표시), cert_links 열이 있습니다. 어떻게 든 사용자는 cert_links 열이 비어있는 material_name의 항목을 두 번 생성합니다.중복 된 테이블 삭제

내가 가진 모든 user_id에 중복을 나열 할 수 있습니다 : 나는 mod_result = 'Fail'cert_links = ''이있는 중복 된 항목을 삭제하려면

SELECT user_id, material_name, mod_score, cert_links, start_time 
FROM activity_logs 
WHERE mod_result = 'Pass' AND cert_links = '' 

+0

두 개의 쿼리가 동일합니까 ?? ** 복제 ** 란 무엇을 의미합니까? 출력 좀 보여 주시겠습니까? –

+0

혼란스러워서 .. 출력물을 게시하는 방법을 모르겠습니다. 하지만 mod_result = 'Fail'및 cert_links = '를 사용하여 모든 사용자에게 동일한 material_name을 수집하는 것이 좋습니다. – user3349519

+0

전체 행이 user_id, material_name 등입니까? –

답변

0

사용할 수 :

Delete from activity_logs WHERE mod_result = 'Fail' AND cert_links = '' or ''NULL' 
+0

시도했지만 중복 된 행에서 1 행을 유지하려고합니다. – user3349519

+1

당신의'where mod_result = 'Fail'AND cert_links = ''또는 ''NULL''은 유효한 MySQL 구문이 아닙니다; –

+0

나는 최신 기록을 유지하고 싶습니다. – user3349519

0

3 단계 :

1 단계 : 이동 임시 테이블에 중복되지 않은 (고유 한 튜플)

CREATE TABLE new_table AS SELECT * FROM old_table WHERE 1 GROUP BY [중복 제거 BY COLUMN];

2 단계 : 오래된 테이블 삭제

DROP TABLE old_table;

3 단계 : OLD_TABLE에 OLD_TABLE

이름 바꾸기 표 NEW_TABLE의 이름으로 NEW_TABLE 이름을 변경;

+0

감사하지만 전체 테이블의 중복 레코드는 삭제하지 않으려합니다. 내가 원하는 것은 user_id를 참조하여 중복 된 제목 (material_name)을 제거하는 것입니다. John Doe에 기록 된 2 개의 ABC Materials가있는 경우 나머지를 삭제하고 하나의 항목 만 남기고 싶습니다. – user3349519

+0

user_id별로 그룹화하고 모든 material_names 목록을 작성한 다음 하나의 레코드를 유지하거나 모든 자료에 대해 중복을 삭제하려면 어떻게합니까? – user3349519