2013-06-28 2 views
0

데이터베이스에서 여러 열을 삭제할 수있는 방법은 무엇입니까?여러 행을 삭제하는 SQL 쿼리

Owner-aaa 
coowner-aaa 
owner-aaa 
subowner-aaa 

우리가 행이 "소유자-AAA"와 중복된다 "소유자-AAA"를 가진 삭제할 수 있습니다 방법 : 한다고 가정 DB는 다음과 같은 데이터 (ID, LIST_NAME, 사용자) 및 LIST_NAME이 값으로있다?

우리는 여기이 쿼리에 무언가를 추가 할 수 있습니다

delete from <table_name> where list_name = 'owner-aaa' 

그러나 그것은 단지 소문자 목록을 삭제합니다, 나는 작은 대문자로 중복 검사 일반적으로 무언가 원하고 그들 모두를 삭제 하시겠습니까? 사전 에이미

+0

Owner-aaa와 owner-aaa를 모두 삭제 하시겠습니까? 아니면 하나만 유지하고 나머지는 모두 삭제 하시겠습니까? – fthiella

+0

또는 중복 된 행을 모두 삭제 하시겠습니까 ?? –

+0

모든 행을 삭제하고 싶었습니다 ... - Amy – Amy

답변

1
delete from tableName where LOWER(list_name) = 'owner-aaa' 
+0

누구든지 downvoted, OP는 값을 대문자 또는 소문자 상관없이 행을 삭제하는 방법에 대해 아무것도 말했다. – fancyPants

+0

네 말이 맞아요 .-Amy – Amy

+0

OP는 뭔가 일반적인 것을 원한다고 말했고, 이것에 하드 코딩 된 값이 있습니다. – gareththegeek

0
DELETE a 
FROM list a 
INNER JOIN list b ON LOWER(a.list_name)=LOWER(b.list_name) 
WHERE a.id <> b.id 
1
DELETE FROM mytable WHERE LOWER(listname) IN 
(SELECT LOWER(listname) FROM mytable 
GROUP BY LOWER(listname) 
HAVING COUNT(*) > 1) 
+0

mysql은 대개 그룹화 할 때 대소 문자를 무시하지만 삭제 쿼리에서 IN 절을 사용하는 것을 허용하지 않습니다. – fthiella

+0

복제본이 존재하는 모든 레코드를 제거합니다 (즉, 하나도 남기지 않습니다). – Curt

+0

예, MySQL에 대해서는 잘 모르겠다. 그렇다. 모든 중복을 제거한다. –

0

Meaby에서

덕분에 당신은/LOWER UPPER SQL 함수를 사용할 수 있습니다.

하지만 모델이 맞습니까? 그런 이름 목록을 가지고있는 것은 정말로 이상하게 보입니다. ID와 이름 필드가있는 다른 테이블 이름이어야합니다. 그것은 1-N 관계입니다.

0

나는 중복이 발생한 모든 행을 삭제할 것인지 또는 하나만 남기고 진정한 중복 만 제거 할 것인지 여부에 대해 확실하지 않습니다. 그래서 여기에 각각의 기회는 다음과 같습니다

DELETE FROM MyTable WHERE id IN 
(
    SELECT T1.id 
    FROM MyTable T1 
      INNER JOIN MyTable T2 
      ON UPPER(T1.list_name) = UPPER(T2.list_name) 
      AND T2.id <> T1.id 
      AND (T1.id <> (SELECT MAX(id) FROM MyTable WHERE UPPER(list_name) = UPPER(T1.list_name)) 
) DUPS 

이 id 필드가 중복있다 모든 레코드를 제거하려면 각 레코드

에 고유 한 가정 것을 :

은 진정한 중복을 제거하려면 하위 쿼리에서 두 개의 "AND"절을 제거합니다.

+0

예를 들어 모든 행을 삭제하고 싶습니다. owner-aaa 및 Owner-aaa는 둘 다 총 카운트 없음과 관계 없습니다. – Amy

관련 문제