2013-08-04 25 views
0

用戶選擇最喜歡的商場,品牌和行業SQL如何到達並檢查另一個查詢中的查詢元素? (許多一對多)

我試圖表明這是有效的用戶的最愛活動。

表:運動(具有商場及品牌),MallCampaign,購物中心,品牌,扇區,用戶,最喜歡的

例如;用戶選擇X,Y,ZZ:不包括阿迪達斯店)商場; 阿迪達斯,李維斯,維多利亞的祕密品牌; 鞋子部門。所以用戶應該只看到阿迪達斯的活動,這是有效的X,Y商場。

如何結合這些查詢?我應該使用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 
+0

你能提供樣品數據和預期結果嗎?你的解釋並不能解決正義問題。例如,您在文本中提及了X,Y,Z和各種品牌,但是在示例SQL中沒有對應的條目。 –

回答

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)的指數,那麼表現應該相當不錯。

+0

看起來解決方案就是這樣。由於它非常複雜,難以用數據進行測試。不管怎麼說,還是要謝謝你。 –