다섯 개의 관련 필드가있는 표;MySQL 테이블에서 "여분의"빈 행을 제거하는 방법은 무엇입니까?
ID (Autoincrement,unique, etc)
ID_customer - ties in each row to another table with customers, not unique, not NULL
value1 - can be 0 and NULL (NULL is not 0)
value2 - can be 0 and NULL (NULL is not 0)
type - can be 1 or 0
나는 테이블을 통해 이동과 고객이 하나 개 이상의 행이 입력에 같은 값을 가진 여러 행이있는 경우, 자신의 가치 만 0이 그러한 행을 제거 각각의 경우를 찾으려면 열. 예를 들어;
1 1 40 8 1
2 1 0 0 1 <--
3 1 30 5 0
4 1 45 8 0
이 경우 명령은 표시된 행을 제거해야하지만 나머지는 그대로 두어야합니다. 그리 어렵지 않습니다. 이런 식으로 뭔가 아마 (유형 = 0 반복) 일 것이다 :
DELETE FROM table
WHERE value1 = 0 AND value2 = 0 AND type = 1
AND ID_customer IN
(SELECT ID_customer
FROM table
WHERE type = 1 GROUP BY ID_customer HAVING count(*) > 1)
문제는 이와 같은 경우가 존재할 수 있습니다 :
5 2 0 0 1
6 2 0 0 1 <--
7 2 0 0 0
8 2 0 0 0 <--
어떤 경우에는 내가 행의 두 가지를 제거 할 것, 모든 행은 아닙니다. 중복 열을 제거 할 수있는 방법이 있습니까? 값 열이 0 일 때만? 이 작업 (다시, 유형 = 0 반복) 또는 뭔가 놓치고 있습니까?
DELETE
FROM TABLE
WHERE value1 = 0 AND value2 = 0 AND TYPE = 1
AND ID NOT IN
(SELECT ID
FROM TABLE
WHERE value1 = 0 AND value2 = 0 AND TYPE = 1
GROUP BY ID_customer)
편집 : 나는 다른 중복 제거 질문에 검토 한 결과,하지만 난 (내가 중복의 일부를 유지하려는 곳에서) 내 테이블이 요구하는 방식으로 하위 쿼리를 정의하는 하나를 찾을 수 없습니다.
사용자 및 유형마다 둘 이상의 중복이있을 수 있습니까? – Shadow
예, 값 열이 0이 아닌 한. – Pontus
@JanZeiseweis 다시 한 번, 중복으로 표시된 주제는 첫 번째 부분이 아닌 두 번째 부분에만 응답합니다. 질문의 삭제 쿼리에서 구문 오류가 발생합니다 (수정중인 동일한 테이블에서 선택할 수 없음) – Shadow