0

ユーザーがお気に入りのモール、ブランド、セクターを選択

ユーザーのお気に入りに有効なキャンペーンを表示しようとしています。

テーブル: キャンペーン (モールとブランドがあります)、MallCampaign、モール、ブランド、セクター、ユーザー、お気に入り

例えば; ユーザーがX、Y、Z ( Z: Adidas ショップを含まない) のショッピング モールを選択した。AdidasLevi'sVictoria's Secretブランド。部門。したがって、ユーザーは、 X、Yモールで有効なAdidasのキャンペーンのみを表示する必要があります。

これらのクエリを組み合わせる方法は? JOIN または IF EXIST を使用する必要がありますか?

    SELECT mc.CampaignId, c.CampaignTitle
    FROM MallCampaign mc 
    JOIN Mall m ON m.MallId = mc.MallId
    JOIN Campaign c ON c.CampaignId = mc.CampaignId
    JOIN Brand b ON b.BrandId = c.BrandId


    SELECT FavoriteItemId AS FavoriteMalls
    FROM Favorite
    WHERE UserId = @UserId AND FavoriteItemType=1 

    SELECT FavoriteItemId AS FavoriteBrands
    FROM Favorite
    WHERE UserId = @UserId AND FavoriteItemType=3 

    SELECT FavoriteItemId AS FavoriteSectors
    FROM Favorite
    WHERE UserId = @UserId AND FavoriteItemType=2 
4

1 に答える 1

0

使用することをお勧めしますin

SELECT mc.CampaignId, c.CampaignTitle
FROM MallCampaign mc 
where mallid in (SELECT FavoriteItemId AS FavoriteMalls
                 FROM Favorite
                 WHERE UserId = @UserId AND FavoriteItemType=1
                ) and
      brandId in (SELECT FavoriteItemId AS FavoriteBrands
                  FROM Favorite
                  WHERE UserId = @UserId AND FavoriteItemType=3
                 ) and
      sectorid in (SELECT FavoriteItemId AS FavoriteSectors
                   FROM Favorite
                   WHERE UserId = @UserId AND FavoriteItemType=2 
                  )

これにより、クエリの意図が明確になります。そして、パフォーマンスに関する指標があれば、Favorite(UserId, FavorteItemType, FavoriteItemId)かなり良いはずです。

于 2013-08-04T15:48:31.730 に答える