2012-10-19 3 views
0

다음 테이블이 있으며 주어진 조건을 만족하는 행을 제거해야합니다.SQL에서 아래 조건을 사용하여 레코드를 삭제하는 방법

도와주세요.

테이블 : Product

productId productname datecreated 
1   sample1  20/01/2012 
2   sample1  20/01/2012 
3   sample2  20/02/2012 
4   sample2  20/02/2012 
5   sample2  20/09/2012 
6   sample1  20/08/2012 

테이블 : Category

categoryid categoryname 
1   cat1 
2   cat2 
3   cat3 

테이블 : ProductCategory

postid categoryid 
1   1 
4   2 

가 지금은 첫 번째 테이블에서 count > 1 group by productnamedatecreated가있는 행을 삭제하려면 그리고 또한 productcategory 테이블에 포함되지 않은 행

i.사전

+1

테이블 중 하나에 오류가 있습니다. ProductCategory는 범주 이름 대신 categoryid 열에 1, 2 및 3을 포함해야합니다. – LuigiEdlCarno

+0

LugiEdlCarno에게 감사드립니다. 나는 그 질문을 편집했다. –

+0

어떤 DBMS입니까? –

답변

0
delete Product 
from Product as P 
where 
    P.productId not in (select T.postid from ProductCategory as T) and 
    exists 
    (
     select T.* 
     from Product as T 
     where 
      T.productId <> P.productId and 
      T.productname = P.productname and 
      T.datecreated = P.datecreated 
    ) 

sql fiddle demo에서

덕분에 전자, 나는 그것이 같은 DateCreated와 같은 ProductName을 가지고 있기 때문에

ProductId 2 and ProductId 3 

을 제거 할 또한 ProductCategory 표에 포함되지 않은

+0

productname과 datecreated가 같고 테이블에 두 개의 행이있는 경우 카운트가 고려됩니다. –

+0

예, 이미 가지고 있다고 생각합니다. 내 대답을 살펴보십시오. –

0
당신은 여전히 ​​당신의 제품 테이블에서 중복을 제거 할 경우 1

Delete from Product 
Where productId not IN(select productId from ProductCategory) 

그리고 당신이 시도 할 수

단계 :

먼저 ProductCategory 테이블 내부가 아닌 모든 제품을 제거하기 위해이 작업을 수행 할 수

STEP 2

Select productname, datecreated, Count(*) 
Into TheKeys 
from Product 
Group by productname, datecreated 
Having Count(*)>1 

중복 포함됩니다이 TheKeys 테이블은

3 단계

Select DISTINCT Product.* 
Into TheRows 
From Product, TheKeys 
Where Product.productname = TheKeys.productname 
And Product.datecreated = TheKeys.datecreated 

표 TheRows는

STEP 4

Delete Product 
From Product, TheKeys 
Where Product.productname = TheKeys.productname 
and Product.datecreated = TheKeys.datecreated 

이 모든 중복 행을

을 삭제하고 마지막으로 다시 고유 행을 넣을 수있는 모든 대응 행이 들어 이 테이블에 :

(210)

5 단계

Insert into Product (productId, productname, datecreated) 
Select * From TheRows 

참고 : 모든 카테고리 에 속하지 않는 마음을 가진 제품을 해달라고하면 당신은 단계를 수행 한 후 다음 3

Delete From TheRows 
Where productId not In(Select productId from ProductCategory) 

과이 오른쪽 첫 번째 단계를 생략하고 할 수있는 STEP 4로 계속

관련 문제