次のような製品、カテゴリ、および「productsInCategories」のデータベースがあります。
ユーザー
id█ name ▌
▀▀█▀▀▀▀▀▀▀▀▌
1 █ john ▌
69█ jane ▌
製品
id█ name █ cost █description▌
▀▀█▀▀▀▀▀▀▀▀█▀▀▀▀▀▀█▀▀▀▀▀▀▀▀▀▀▀▌
21█snickers█ 23 █ foo ▌
34█ mars █ 20 █ bar ▌
37█ daim █ 21 █ oofrab ▌
79█ banana █ 8 █ foobar ▌
80█ apple █ 10 █ barfoo ▌
カテゴリー
id█ userId █ name ▌
▀▀█▀▀▀▀▀▀▀▀▀█▀▀▀▀▀▀▀▀▀▌
10█ 69 █chocolate▌
55█ 69 █favorites▌
20█ 1 █ fruit ▌
カテゴリー内の製品
categoryId█productId▌
▀▀▀▀▀▀▀▀▀▀█▀▀▀▀▀▀▀▀▀▌
10 █ 21 ▌
10 █ 34 ▌
20 █ 79 ▌
20 █ 80 ▌
55 █ 21 ▌
55 █ 37 ▌
これにより、次のように見なすことができるものが生成されます。
Users
john
fruit
banana
apple
jane
chocolate
snickers
mars
daim
favorites
snickers
daim
カテゴリのすべての製品を取得したいときは、次のようにします。
SELECT *
FROM Products
INNER JOIN ProductsInCategories
ON Products.Id=ProductsInCategories.product
WHERE category=@0
,@0=categoryId
それはすべて正常に機能しており、製品の挿入または削除は非常に簡単です. しかし、私は今、頭を包むことができない問題を抱えています。
つまり、カテゴリを削除します。どうすればそれを行うことができますか?私は何時間もそれに取り組んできましたが、うまくいかないようです。ユーザーがカテゴリを削除すると、そのカテゴリにのみ存在するすべての製品が、関連する productInCategories-records と共に削除されます。ユーザー「ジェーン」が彼女のカテゴリ「チョコレート」を削除すると、「お気に入り」カテゴリにも存在するため、「スニッカーズ」や「マーズ」ではなく、製品「マーズ」を削除したいとします。