0

次のテーブルがあり、特定の条件を満たす行を削除する必要があります。

私を助けてください。

テーブル: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 productnameandを持つ行と、テーブル に含まれていない行を削除したいdatecreatedproductcategory

つまり、削除したい

  ProductId 2 and ProductId 3

同じProductNameであり、表DateCreatedにも含まれていないためProductCategory

前もって感謝します

4

2 に答える 2

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

于 2012-10-19T12:16:29.450 に答える
0

最初にこれを実行して、ProductCategory テーブル内にないすべての製品を削除できます。

ステップ1

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

そして、まだ Product テーブルから重複を削除したい場合は、これを試すことができます:

ステップ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 には、対応するすべての行が含まれています

ステップ4

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

これにより、すべての重複行が削除されます

最後に、これを使用して一意の行をテーブルに戻します。

ステップ5

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

注: どのカテゴリにも属さない製品を使用してもかまわない場合は、最初のステップを省略して、ステップ 3 の直後にこれを行うことができます。

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

その後、STEP 4 に進みます

于 2012-10-19T12:36:03.643 に答える